CmGraphql
This should help you to install graphql and setup the basics on any new rails application.
Install
Add the gem to the Gemfile
gem 'cm-admin', git: 'https://github.com/commutatus/template-paging-api.git', branch: 'main'
Setup
If this is the first time graphql is getting added to the project, run the following generator
rails g cm_graphql:add_graphql
This will run the graphql generator graphql:install
and copy the graphql schema template.
Generator
Another generator to help you get started with a basic list endpoint is
rails g cm_graphql:list_api model_name
rails g cm_graphql:list_api course
This will add the necessary files to the application.
- course_list_type
- course_type
- course_query
Mount the engine at
mount CmGraphql::Engine => "/cm-graphql"
And you are done, you can test out the pagination.
Explaination on how this works.
- Kaminari Gem has
page
andper
methods. These methods are used to set the page no and records per page of a model. - The paging Input type in
app/graphql/types/inputs/base/paging.rb
exposes a interface to the frontend where the frontend can enter page no and records per page. - The query uses a
list
method on the model. This method is inherited by the model from the paginator concern. - We apply the kaminari method in the list method to apply pagination to the model.
- The paginator then calls the filtered_list model to arrange the model data and paging data in a representable way. This helps us make sure all the pagination follow the same pattern for data representation.
- The paging_type in
app/graphql/types/objects/base/paging_type.rb
is used to represent the paging data to the frontend. - The pagination and model data is represented with object type in
app/graphql/types/objects/example_list_type.rb
. - And we have successfully applied pagination to our graphql project.