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,
}
}),
},
}