프로젝트
[인스타그램 클론코딩] #3.11 follow unfollow Resolver
jhkang-dev
2020. 9. 8. 13:40
안녕하세요 강정호입니다
이번 포스팅에서는 팔로잉, 팔로잉 취소 API를 개발해보겠습니다.
follow.graphql
type Mutation {
follow(id: String!): Boolean!
}
수정을 하는 쿼리작업이기 때문에 Mutation을 사용하였고, follow 메서드는 userId를 매개변수로 받습니다. 리턴값은 변경여부를 보여주는 Boolean 타입입니다.
follow.js
import { isAuthenticated } from "../../../middlewares";
import { prisma } from "../../../../generated/prisma-client";
export default {
Mutation: {
follow: async (_, args, { request }) => {
isAuthenticated(request);
const { id } = args;
const { user } = request;
try {
await prisma.updateUser({
where: {id: user.id},
data: {
following: {
connect: {
id
}
}
}
});
return true;
}catch {
return false;
}
}
}
}
1) isAuthenticated : 인증 메서드를 사용하여 로그인 인증된 User인지 검증을 합니다.
2) user의 id에 해당하는 following에 following 할 id를 넣어서 update. 그리고 자동으로 해당 user는 follower가 생김.
테스트


wwwkang8(cke2ru7tc556r0a35vd9i6jw7) following : minkyu(ckdydwqeeqede0a359c8r7d7k)
minkyu(ckdydwqeeqede0a359c8r7d7k) follower : wwwkang8(cke2ru7tc556r0a35vd9i6jw7)
이렇게 following을 업데이트 하면 자동으로 상대방의 follower까지 업데이트 된다.
unfollow.graphql
type Mutation {
unfollow(id: String!): Boolean!
}
unfollow를 하면 리턴값으로 unfollow 여부를 리턴합니다
unfollow.js
import { isAuthenticated } from "../../../middlewares";
import { prisma } from "../../../../generated/prisma-client";
export default {
Mutation: {
unfollow: async (_, args, {request}) => {
isAuthenticated(request);
const { id } = args;
const { user } = request;
try{
await prisma.updateUser(
{
where: {id: user.id},
data: {
following: {
disconnect: {
id
}
}
}
});
return true;
}catch{
return false;
}
}
}
}
이번엔 follow와 다르게 disconnect를 사용한다.
테스트


unfollow 결과를 보면 이전에 follow following 내역이 사라진 것을 확인할 수 있습니다.