캐릭터 조회
router.get("/search", async (req, res, next) => {
const characters = await prisma.characters.findMany({
select: {
nickname: true,
health: true,
power: true,
created_at: true,
},
orderBy: {
created_at: "desc", // 게시글을 최신순으로 정렬합니다.
},
});
return res.status(200).json({ data: characters });
});
캐릭터 상세 조회 추가
router.get("/search/:character_id", async (req, res, next) => {
// req.params에서 character_id 추출
const { character_id } = req.params;
// 특정 조건에 맞는 캐릭터는 MyCharacter
const MyCharacter = await prisma.characters.findFirst({
// 그 조건은 characters 테이블의 character_id 컬럼에
// 요청된 character_id가 있는지 확인
// +character_id의 +는 문자열을 숫자로 변환하는 방법중 하나
// character_id는 파라미터로 전달되는데, 이때 문자열로 전달된다.
// character_id는 숫자형태이기 때문에 변환과정 필요
where: {
character_id: +character_id,
},
// 반환 컬럼 지정
select: {
nickname: true,
health: true,
power: true,
// 상세조회 시 money 컬럼까지 조회
money: true,
created_at: true,
},
});
return res.status(200).json({ data: MyCharacter });
});
아이템 생성
router.post("/create-item", async (req, res) => {
// 요청 본문에서 nickname 추출
const { item_code, item_name, item_stat, item_price } = req.body;
// authM 미들웨어에서 인증을 거친 accounts 정보를 가져오고
// accounts에서 account_id를 추출한다
// 닉네임 중복 검증
const isExistCode = await prisma.item.findFirst({
where: { item_code },
});
if (isExistCode) {
return res.status(409).json({ message: "이미 존재하는 아이템입니다." });
}
const newItem = await prisma.item.create({
data: {
item_code: item_code,
item_name: item_name,
item_stat: item_stat,
item_price: item_price,
},
});
return res.status(201).json({ message: "아이템 생성 성공", item: newItem });
});
아이템 전체 목록 조회, 아이템 상세 정보 조회, 아이템 삭제 API
router.patch("/fix-item/:item_code", async (req, res) => {
// 요청 본문에서 아이템 코드 추출
const { item_code } = req.params;
console.log(item_code);
const { item_name, item_stat } = req.body;
const selectedItem = await prisma.item.findFirst({
where: { item_code: parseInt(item_code, 10) },
});
if (!selectedItem) {
return res
.status(404)
.json({ errorMessage: "존재하지 않는 아이템 데이터입니다." });
}
const fixedItem = await prisma.item.update({
where: { item_code: parseInt(item_code, 10) },
data: {
// 뽑아온 item_name, item_stat를 각 컬럼에 적용한다.
item_name: item_name,
item_stat: item_stat,
},
});
return res.status(201).json({ message: "아이템 수정 성공", item: fixedItem });
});
router.get("/list_search", async (req, res, next) => {
const items = await prisma.item.findMany({
select: {
item_code: true,
item_name: true,
item_price: true,
},
orderBy: {
item_code: "desc", // 아이템 코드를 내림차순으로 정렬
},
});
return res.status(200).json({ data: items });
});
router.get("/item_search/:item_code", async (req, res, next) => {
// req.params에서 item_code 추출
const { item_code } = req.params;
// 특정 조건에 맞는 캐릭터는 MyCharacter
const itemDetail = await prisma.item.findFirst({
// 그 조건은 item 테이블의 item_code 컬럼에
// 요청된 item_code 있는지 확인
// +item_code +는 문자열을 숫자로 변환하는 방법중 하나
// item_code 파라미터로 전달되는데, 이때 문자열로 전달된다.
// item_code 숫자형태이기 때문에 변환과정 필요
where: {
item_code: +item_code,
},
// 반환 컬럼 지정
select: {
item_name: true,
item_stat: true,
item_price: true,
},
});
return res.status(200).json({ data: itemDetail });
});
파라미터를 통해 받은 데이터는 문자열로 반환되기 때문에 정수 타입이 적용된 컬럼에 데이터라면 정수로 바꾸어 진행하였다.
아이템 시뮬레이션 프로젝트 기본 요구사항은 모두 완성하였다.