11. seeFollowers, pagination

김종민·2022년 4월 22일
0

insta-backend

목록 보기
10/37

1. seeFollowers.typeDefs.js

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을 위해서 그럼

2. seeFollowers.resolvers.js

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한다.  
    
    },
  },
}
profile
코딩하는초딩쌤

0개의 댓글