import { gql } from 'apollo-server'
export default gql`
type SeeFollowersResult {
ok: Boolean!
error: String
followers: [User]
totalPages: Int
}
type Query {
seeFollowers(username: String!, page:Int!): SeeFollowersResult!
}
`
Query seeFollowers에 args로 username, page를 받음.
result로 totalPage, followers:[User] 배열로 받음.
!!!check
page와 totalPage 중요!!! pagination을 위해서 그럼
import prisma from '../../client'
export default {
Query: {
seeFollowers: async (_, { username, page }) => {
const ok = await prisma.user.findUnique({
where: { username },
select: { id: true },
})
if (!ok) {
return {
ok: false,
error: 'User not found',
}
}
const followers = await prisma.user
.findUnique({ where: { username } })
.followers({ take: 5, skip: (page - 1) * 5 })
///username으로 user를 찾은 후에 .followers로 user의 followers만 찾는다.
///take, skip으로 page에 나타낼 user를 설정한다.5명씩 page에 담는다는 뜻.
const totalFollowers = await prisma.user.count({
where: { following: { some: { username } } },
})
///totalFollower의 수는 전체user의 전체 following에서 username이 있는 수를 센다.
return {
ok: true,
followers,
totalPages: Math.ceil(totalFollowers / 5),
}
///나의 followers들을 return하고 totalPage는 totalFollowers 5로 나눈 수를 return한다.
},
},
}