19. toggleLike

김종민·2022년 4월 25일
0

insta-backend

목록 보기
18/37

1. toggleLike.typeDefs.js

import { gql } from 'apollo-server'

export default gql`
  type ToggleLikeResult {
    ok: Boolean!
    error: String
  }
  type Mutation {
    toggleLike(id: Int!): ToggleLikeResult
  }
`

2. toggleLike.resolvers.js

import prisma from '../../client'
import { protectedResolver } from '../../users/users.util'

export default {
  Mutation: {
    toggleLike: protectedResolver(async (_, { id }, { loggedInUser }) => {
      const photo = await prisma.photo.findUnique({
        where: { id },
      })
      ///like를 누르려는 photo를 찾음.
      
      console.log(photo)
      if (!photo) {
        return {
          ok: false,
          error: 'Photo not founde',
        }
      }
      
      const likeWhere = {
        photoId_userId: {
          userId: loggedInUser.id,
          photoId: id,
        },
      }
      ///like를 누르려는 photoId 누르는 userId를 지정해줌.
      ///schema.prisma의 @@unique([userID, photoId])를 뜻하는것.
      
      const like = await prisma.like.findUnique({
        where: likeWhere,
      })
      ///누르려는 photo에 user가 like를 눌렀는지 확인시켜줌.
      
      if (like) {
        await prisma.like.delete({
          where: likeWhere,
        })
        ///like가 있으면 disconnect 해주고,
        ///like가 없으면 like를 connect해줌.
        ///user를 지정해 주고, photo를 연결시킴.
        
      } else {
        await prisma.like.create({
          data: {
            user: {
              connect: {
                id: loggedInUser.id,
              },
            },
            photo: {
              connect: {
                id: photo.id,
              },
            },
          },
        })
      }
      return {
        ok: true,
      }
    }),
  },
}
profile
코딩하는초딩쌤

0개의 댓글