9. followUser

김종민·2022년 4월 22일
0

insta-backend

목록 보기
8/37

following를 하면 반대쪽은 follower가 됨!!

1. schema.prisma

model User {
  id        Int      @id @default(autoincrement())
  username  String   @unique
  email     String   @unique
  password  String
  bio       String?
  avatar    String?
  followers User[]   @relation("FollowRelation", references: [id])
  following User[]   @relation("FollowRelation", references: [id])
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

followers User[] @relation("FollowRelation", references:[id])
following User[] @relation("FollowRelation", references:[id])
를 schema.prisma model User에 넣어준다.

2. user.typeDefs.js

export default gql`
  type User {
    id: Int!
    username: String!
    email: String!
    password: String!
    bio: String
    avatar: String
    createdAt: String!
    updatedAt: String!
    followers: [User]
    following: [User]
    totalFollowers: Int!
    totalFollowing: Int!
    isMe: Boolean!
    isFollowing: Boolean!
  }
`

마찬가지로 user.typeDefs.js 에 followers: [User] following: [User] 를 넣어준다.

3. followUser.typeDefs.js

import { gql } from 'apollo-server'

export default gql`
  type FollowUserResult {
    ok: Boolean!
    error: String
  }
  type Mutation {
    followUser(username: String!): FollowUserResult
  }
`

별거 없음.

4. followUser.resolvers.js

export default {
  Mutation: {
    followUser: protectedResolver(async (_, { username }, { loggedInUser }) => {
    ///username은 follow할 상대방을 말함.
    
      const ok = await prisma.user.findUnique({ where: { username } })
      if (!ok) {
        return {
          ok: false,
          error: 'That user does not exist',
        }
      }
      ///follow할 상대가 없으면 error return
      
      await prisma.user.update({
        where: {
          id: loggedInUser.id,
        },
        data: {
          following: {
            connect: {
              username,
            },
            ///////////update, data:{following:{connect:{username}}}으로 following
          },
        },
      })
      return {
        ok: true,
      }
    }),
  },
}
profile
코딩하는초딩쌤

0개의 댓글