오늘은 어제에 이어서 아이템 추가, 수정, 삭제를 구현했다.
처음에는 아이템 추가를 만들 때에는 유효성 검사를 위해
JWT로 모든 DB에 필요한 값들을 받는 식으로 구현을 했는데
아이템 수정에서 ItemCode는 req.params로 받아오고,
데이터의 입력이 없는 경우에도 수정이 동작해야해서
JWT를
const checkItemInput = joi.object({
itemName: joi.string().min(1).max(191),
addHealth: joi
.number()
.integer()
.min(Number.MIN_SAFE_INTEGER)
.max(Number.MAX_SAFE_INTEGER),
addPower: joi
.number()
.integer()
.min(Number.MIN_SAFE_INTEGER)
.max(Number.MAX_SAFE_INTEGER),
});
const checkPrice = joi.object({
price: joi.number().integer().min(0).max(Number.MAX_SAFE_INTEGER).required(),
});
const checkItemCode = joi.object({
itemCode: joi.number().integer().min(1).max(Number.MAX_VALUE).required(),
});
위와 같이 수정했다. 위에서 값이 없을 경우 에도 동작을 해야한다 했었는데
Health와 Power는 0으로 설정 해줘야 했고, Name은 이전 Name을 가져오는 방식이었다.
(Price는 수정이 불가능한 항목)
마지막으로 Clinet가 입력한 형식대로 그대로 응답을 줘야했기 때문에
//Client에게 제공할 JSON 형태 정보 제작
const response = {
item_code: updateItem.itemCode,
item_name: updateItem.itemName || isExist.itemName,
item_stat: {},
};
if (item_stat.health !== undefined)
response.item_stat.health = updateItem.addHealth;
if (item_stat.power !== undefined)
response.item_stat.power = updateItem.addPower;
위와 같이 입력된 값이 undefinde이면 항목을 반환 항목에 추가하지 않는 방식으로 만들어줬다.
전체 아이템 수정 코드 :
// 아이템 수정 API
ItemRouter.patch("/item/:itemCode", async (req, res, next) => {
try {
// itemCode 검증
const { itemCode } = await checkItemCode.validateAsync({
itemCode: req.params.itemCode,
});
// 아이템 존재 여부 확인
const isExist = await prisma.Items.findFirst({
where: {
itemCode,
},
});
if (!isExist)
return res
.status(404)
.json({ message: "변경할 아이템이 존재하지 않습니다." });
const { item_name, item_stat = {} } = req.body;
// 입력 데이터 검증
const itemValidation = await checkItemInput.validateAsync({
itemName: item_name || isExist.itemName,
addHealth: item_stat.health || 0,
addPower: item_stat.power || 0,
});
// 아이템 업데이트
const updateItem = await prisma.Items.update({
where: {
itemCode,
},
data: {
...itemValidation,
},
});
//Client에게 제공할 JSON 형태 정보 제작
const response = {
item_code: updateItem.itemCode,
item_name: updateItem.itemName || isExist.itemName,
item_stat: {},
};
if (item_stat.health !== undefined)
response.item_stat.health = updateItem.addHealth;
if (item_stat.power !== undefined)
response.item_stat.power = updateItem.addPower;
return res.status(200).json({ data: response });
} catch (error) {
next(error);
}
});
'TIL' 카테고리의 다른 글
2024년 9월 13일 TIL (0) | 2024.09.13 |
---|---|
2024년 9월 12일 TIL (0) | 2024.09.12 |
2024년 9월 10일 TIL (0) | 2024.09.11 |
2024년 9월 9일 TIL (0) | 2024.09.09 |
2024년 9월 7일 TIL (0) | 2024.09.07 |