-->DB를 건덜이지 않으면서 data를 control하기도 하고, function을 실행하기도 함.
import { gql } from 'apollo-server'
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!
}
`
users.typeDefs.js
totalFollowers, totalFollowing, isMe, isFollowing는
Model User에는 포함되어 있지 않음.
하지만, return User에서 사용가능함.
user.resolvers.js
import prisma from '../client'
export default {
User: {
totalFollowing: ({ id }) =>
prisma.user.count({ where: { follower: { some: id } } }),
///{id}는 그동안 resolver에서 _, 즉 root로 표시되었던 부분.
///예를 들어 호날두 인스타에 들어갔을때, 호날두의 id가 {id}임.
///request의 id가 {id}임,.
///그래서 totalFollowing를 모든 user의 follower에서 호날두의
///id가 포함된 수를 counting함.
totalFollowers: ({ id }) =>
prisma.user.count({ where: { following: { some: { id } } } }),
isMe: ({ id }, _, { loggedInUser }) => {
if (!loggedInUser) {
return false
}
return id === loggedInUser.id
},
///request의 id와 현재 로그인 되어있는 loggedInUser의 아이디를
///비교해서 boolean으로 return함.(true, false로)
isFollowing: async ({ id }, _, { loggedInUser }) => {
if (!loggedInUser) {
return false
}
const exists = await prisma.user.count({
where: { username: loggedInUser.username, following: { some: { id } } },
})
return Boolean(exists)
},
///loggedInUser.username의 following에 request의 id tnfmf counting함
///당연히 1아니면 0이겠쥬.
///0이면 false, 1이면 true.
},
}
User:{
totalFollowing, totalFollowers, isMe, isFollowing}
User안에 만들어 놓고 사용함.
totalFollowing: ({id})=> prisma.user.....
totlaFollowing:({root})=>prism.user...
check!!!!!
{id}가 이해하기가 쉽지않음..
console.log(root)를 찍어보면 이해할 수 있음,
import prisma from '../../client'
export default {
Query: {
seeProfile: (_, { username }) =>
prisma.user.findUnique({
where: { username },
include: {
followers: true,
following: true,
},
}),
},
}
include는 일단 신경쓸 필요 없음.
import { gql } from "apollo-server";
export default gql`
type Query {
seeProfile(username:String) : User
}
`
seeProfile Query를 샐행했을떄,
arg로 받은 username의 totalFollowing, totalFollowers를 구할 수 있음.
arg로 받은 username과 loggedInUser 이 같은지 check하는게 isMe
arg로 받은 username을 loggedInUser 가 Following하고 있는지 check하는게 isFollowing임.
이렇게 보면 root와 computed Field가 조금 이해가 더 잘될거 같음.
공부 존나게 존나게 너무너무 재밌다ㅋㅋㅋㅋ