티스토리 뷰

안녕하세요 강정호입니다

 

이번 포스팅에서는 팔로잉, 팔로잉 취소 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가 생김.

 

테스트

해당 user는 minkyu 이다.

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 내역이 사라진 것을 확인할 수 있습니다.

댓글