Как реализовать пагинацию в graphql, которая возвращает метаданные пагинации вместе с набором данных - PullRequest
0 голосов
/ 01 мая 2020

В настоящее время я использую пагинацию по умолчанию в graphql, то есть с использованием предельного смещения (код приведен ниже). который работает нормально. но вместо списка команд, как мы можем включить метаданные нумерации страниц. и верните метаданные нумерации страниц вместе с этим. Я использую sequalize для извлечения данных

            type Query {
            allTeams(page:Int, pageSize:Int): [Team]
        }
        type Team {
            id: Int
            name: String  
        }

        //resolver with pagination   

        const paginate = ( page, pageSize ) => { 
          var offset = page * pageSize;
          var limit =  pageSize;  
          return {
            offset,
            limit,
          };
        };

        export const resolvers = {
            Query: {     
                  allTeams: async (obj, args, context, info ) =>  Teams.findAll(           
                  paginate( args.page, args.pageSize ),         
                ),
            },
        }

Приведенный выше код вернет только список команд. Есть ли способ, которым я могу вернуть вывод, который содержит список команды и детали нумерации страниц

         {
          "data": {
            "allTeams": [
              {
                "id": 4,
                "name": "Team created from postman",

              },
              {
                "id": 5,
                "name": "Team created from postman",

              }
              ]
            },
               "pageInfo": {
                "currentPage": 2,
                "perPage": 2,
                "itemCount": 4,
                "pageCount": 2,
                "hasPreviousPage": true,
                "hasNextPage": false
              }
        }

1 Ответ

0 голосов
/ 01 мая 2020

Да, вам просто нужно добавить метаданные пагинации в вашу схему и предоставить данные в ваших резольверах. Таким образом, для результата, который вы хотите получить, схема будет выглядеть следующим образом:

type Query {
  teams(page:Int, pageSize:Int): TeamsConnection
}

type TeamsConnection {
  results: [Team]
  pageInfo: PageInfo
}

type Team {
  id: Int
  name: String  
}

type PageInfo {
  currentPage: Int
  perPage: Int
  itemCount: Int
  pageCount: Int
  hasPreviousPage: Boolean
  hasNextPage: Boolean
}

Тогда вашему распознавателю потребуется вернуть новую форму данных ответа. Так что-то вроде:

export const resolvers = {
  Query: {     
    allTeams: async (obj, args, context, info ) => {
      const results = awaitTeams.findAll(           
        paginate(args.page, args.pageSize),         
      );
      return {
        results,
        pageInfo: {...}
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...