티스토리 뷰

안녕하세요 강정호 입니다.

 

오늘은 인스타그램에서 포스팅에 좋아요를 체크하는 API를 만들어보겠습니다.

 

ES6의 const와 let에 대해서 잠깐 짚고 넘어갈게요

const : 선언을 하고 할당을 하게 되면, 다른 값으로 변경이 되지 않는다.

let : 선언을 하고 값을 할당한 후에, 다른 값으로 재할당이 가능

** 기존 var 타입의 변수선언의 문제점이 존재하여 ES6에서는 const, let을 사용.

(출처 : happycording.tistory.com/entry/let-const-%EB%9E%80-%EC%99%9C-%EC%8D%A8%EC%95%BC%EB%A7%8C-%ED%95%98%EB%8A%94%EA%B0%80-ES6)

 

오늘의 핵심!!!

prisma.$exists

Prisma는 각 모델에 대한 CRUD 메서드 뿐만 아니라, $exists 함수도 생성합니다. $exists 함수는 데이터베이스 내에서 조건을 만족하는 객체가 있을 경우 true를 반환합니다. $exists 함수에 where 조건을 걸어서 원하는 조건으로 객체의 존재 유무를 판단할 수 있습니다

prisma 공식 API : v1.prisma.io/docs/1.34/prisma-client/features/check-existence-JAVASCRIPT-pyl1/

참고 페이지 : velog.io/@cadenzah/graphql-node-08-subscription

 

Prisma 1.34 - Check Existence (JavaScript) with JavaScript

Overview The Prisma client lets you check whether a certain record exists in the database using the $exists property. For each model type in your datamodel, the Prisma...

v1.prisma.io

 

toggleLike.js

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

export default {

    Mutation: {
        toggleLike: async (_, args, { request }) => {

            if(!request.user){
                isAuthenticated(request);
                const { postId } = args;
                const { user } = request;
                try{
                    const existingLike = await prisma.$exists.like({
                        AND: [
                            {
                                user:{
                                id: user.id,
    
                                }
                            },
                            {
                                post:{
                                    id: postId
                                }
                            }
                        ]
                    });
    
                    if(existingLike){
                        // To DO
                    }else{
                        const newLike = await prisma.createLike({user: {
                            user: {
                                connect: {
                                    id: user.id
                                }
                            },
                            post: {
                                connect: {
                                    id: postId
                                }
                            }
                        }
                    });
                    }
                }catch{
                    return false;
                }
                return true;
            }

        }
    }


}

isAuthenticated 함수는 토큰으로 사용자 인증을 하였는지 검증하는 함수입니다.

prisma.$exists 함수로 true가 반환된다면, const existingLike 변수에 true가 할당됩니다.

그리고 그 밑의 if 조건에서 existingLike를 사용하여 좋아요를 새로 생성하는 로직이 들어갑니다.

 

toggleLike.graphql

type Mutation {
    toggleLike(postId: String!): Boolean!
}

toggleLike 함수는 해당 Post Id에 대해서 특정 사용자가 좋아요를 눌렀는지 여부를 리턴해주는 쿼리입니다.

middlewares.js

export const isAuthenticated = request => {
    if(!request.user){
        throw Error("You need to log in to perform this action");
    }
    return true;
}

request에 담긴 user 객체의 여부에 따라서 로그인 인증이 되었는지 여부를 판단합니다.

인증이 안되었을 경우 에러를 발생시킵니다.

댓글