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에 넣어준다.
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] 를 넣어준다.
import { gql } from 'apollo-server'
export default gql`
type FollowUserResult {
ok: Boolean!
error: String
}
type Mutation {
followUser(username: String!): FollowUserResult
}
`
별거 없음.
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,
}
}),
},
}