[TIL] 뉴스피트 프로젝트 03

최하온·2024년 2월 15일
0

TIL

목록 보기
35/71
post-thumbnail

API repactory

좋아요를 포함한 게시글 조회

게시글 조회

const formattedPosts = [];
    for (const post of posts) {
      const like = await prisma.likes.count({
        where: {
          post_Id: post.id,
        },
      });
      formattedPosts.push({
        id: post.id,
        title: post.title,
        nickname: post.user.userInfos.nickname,
        content: post.content,
        imageURL: post.imageURL,
        category: post.category,
        createdAt: post.createdAt,
        like: like,
      });
    }

nickname과 like과 같은 선상에서 조회되도록 빈 배열을 만들어 주었고,
여러개의 게시글을 조회하여야하니 for of 문을 사용해 조회한다.
Likes 테이블에서 post_Id를 카운팅하여 like에 담아준 뒤, 배열에 넣어준다.

게시글 상세 조회

const like = await prisma.likes.count({
      where: { post_Id: +id },
    });
	// 코드
 const formattedPost = {
      id: post.id,
      title: post.title,
      nickname: post.user.userInfos.nickname,
      content: post.content,
      imageURL: post.imageURL,
      category: post.category,
      createdAt: post.createdAt,
      like: like,
    };

조회와 로직은 비슷하나 상세 조회이기 때문에 for문 사용을 하지 않고 객체를 할당해준다.

게시글 카테고리별 조회

const posts = await prisma.posts.findMany({
      where: { category: category },
      include: {
        likes: true,
      },
    });

    // 좋아요 수 체크 후 삭제
    for (const post of posts) {
      post.like = post.likes.length;
      delete post.likes;
    }

쿼리 매개변수로 담아준 카테고리에서 likes를 추가하여 준 뒤,
조회와 마찬가지로 여러 게시글 조회이기 때문에 for of를 사용했다.
메모리에 부담을 주지 않기 위해 delete까쥐.

튜터님의 피드백

첫 번째 : 🔚

게시글 조회 시 좋아요 수는 따로 가져오지 않고 post를 select할 때 counting할 수 있습니다! 한번 시도해보세요!

두, 세 번째 : 🔚

  1. restful한 url의 일관성을 유지하면 좋겠습니다 /posts 였다가 /post/:postId 인 것은 좋지 않아요. 그리고 코드 내에서 postId, id를 통일해주세요!
  2. 좋아요 기능에서 existingLike 조회보다 post조회를 먼저하는 게 흐름상 자연스러울 것 같아요.

네 번째 : 🔜 추후 수정 예정

  1. 카테고리별 조회 - query에서 category를 사용중이라면 path에서는 빼주시는 게 좋을 것 같아요. 그렇게 되면 posts를 목록조회하는 api와 path가 같아질텐데요. 카테고리별 조회가 그냥 목록조회를 했을 때와 response의 모양에 차이가 없다면 따로 빼는 것보다는 하나의 api에서 filtering으로 들어가는 게 적절할 것 같아요. top10기능도 사실은 목록 조회의 정렬(인기순)과 pagenation 기능이 들어가면 api를 따로 뺄 필요는 없을 수 있어요!

0개의 댓글