• TOC

정리할 내용

prisma.$exist를 이용해 서 좋아요를 토글해보려고합니다.


prisma.@exist

공식사이트

  • toggleLike.js

    import { isAuthenticated } from '../../../middlewares';
    import { prisma } from '../../../../generated/prisma-client';
    
    export default {
        Mutation: {
            toggleLike: async (_, args, { request }) => { // user를 사용하기 위해 request
                isAuthenticated(request);
                const { postId } = args; // query인자로 게시물 id를 받음.
                const { user } = request; // request에서 user 사용
    
                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;
                }
            }
        }
    };
    

* HTTP Headers

아래 코드를 테스트할 graphql 코드에서 작성한 후에 사용
![image](https://user-images.githubusercontent.com/46010705/60154186-72455580-9821-11e9-83fa-616ec1d72c1f.png)

{ “Authorization”: “Bearer 토큰 “ }