티스토리 뷰

안녕하세요 강정호 입니다

 

오늘은 좋아요 API를 마무리 하고, 댓글 추가 기능을 만들어보겠습니다.

 

toggleLike.js

import { isAuthenticated } from "../../../middlewares";
import { prisma } from "../../../../generated/prisma-client";

export default {
  Mutation: {
    toggleLike: async (_, args, { request }) => {
      isAuthenticated(request);
      const { postId } = args;
      const { user } = request;
      const filterOptions = {
        AND: [
          {
            user: {
              id: user.id
            }
          },
          {
            post: {
              id: postId
            }
          }
        ]
      };
      try {
        const existingLike = await prisma.$exists.like(filterOptions);
        if (existingLike) {
          await prisma.deleteManyLikes(filterOptions);
        } else {
          await prisma.createLike({
            user: {
              connect: {
                id: user.id
              }
            },
            post: {
              connect: {
                id: postId
              }
            }
          });
        }
        return true;
      } catch {
        return false;
      }
    }
  }
};

특정 유저가 해당 글에 대해서 좋아요를 누른적이 없다면, 좋아요를 create 해주고

좋아요를 누른 기록이 있다면 좋아요를 지우는 코드입니다.

 

핵심!!

deleteManyLikes 함수

: deleteMany는 조건에 맞는 데이터를 여러건 지우는데에 사용하는 함수이다.

왜 강의에서 deleteLike가 아닌 deleteManyLikes를 사용한지는 잘 모르겠다.

어차피 포스트ID, 유저ID가 있기 때문에 해당하는 1건의 좋아요만 삭제가 될 것이긴 하지만 굳이 deleteMany를 사용한 이유는 잘 모르겠다.

 

 

addComment.graphql

type Mutation {
    addComment(text: String!, postId: String!): Comment!
}

Comment를 추가할 때는 text와 포스트ID를 입력해야 한다. 그리고 return 값으로 Comment 객체를 리턴한다.

 

addComment.js

import { isAuthenticated } from "../../../middlewares";
import { prisma } from "../../../../generated/prisma-client";

export default {
    Mutation: {
        addComment: async (_, args, {request}) => {
            isAuthenticated(request);
            const { text, postId } = args;
            const { user } = request;
            const comment = await prisma.createComment({
                user: {
                    connect: {
                        id: user.id
                    }
                },
                post: {
                    connect: {
                        id: postId
                    }
                },
                text
            });
            return comment;

        }
    }
}

Comment를 생성할 때는 userId, postId, text를 사용합니다.

userId는 request 객체(인증시에 생성)에서 가져오고, text와 postId는 입력된 값을 가져 온다.

 

테스트

 

결과

 

댓글