카테고리 없음

내일배움캠프 5주차 목요일 TIL

news0516 2024. 11. 28. 20:15

캐릭터 조회

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 });
});


파라미터를 통해 받은 데이터는 문자열로 반환되기 때문에 정수 타입이 적용된 컬럼에 데이터라면 정수로 바꾸어 진행하였다.
아이템 시뮬레이션 프로젝트 기본 요구사항은 모두 완성하였다.