Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
Hotfix release available: 2023-04-04a "Jack Jackrum". upgrade now! [54.1] (what's this?)
New release available: 2023-04-04 "Jack Jackrum". upgrade now! [54] (what's this?)
Hotfix release available: 2022-07-31b "Igor". upgrade now! [53.1] (what's this?)
Hotfix release available: 2022-07-31a "Igor". upgrade now! [53] (what's this?)
New release available: 2022-07-31 "Igor". upgrade now! [52.2] (what's this?)
New release candidate 2 available: rc2022-06-26 "Igor". upgrade now! [52.1] (what's this?)
New release candidate available: 2022-06-26 "Igor". upgrade now! [52] (what's this?)
Hotfix release available: 2020-07-29a "Hogfather". upgrade now! [51.4] (what's this?)
New release available: 2020-07-29 "Hogfather". upgrade now! [51.3] (what's this?)
New release candidate 3 available: 2020-06-09 "Hogfather". upgrade now! [51.2] (what's this?)
New release candidate 2 available: 2020-06-01 "Hogfather". upgrade now! [51.1] (what's this?)
New release candidate available: 2020-06-01 "Hogfather". upgrade now! [51] (what's this?)
Hotfix release available: 2018-04-22c "Greebo". upgrade now! [50.3] (what's this?)
Hotfix release available: 2018-04-22b "Greebo". upgrade now! [50.2] (what's this?)
learnexa_graphql_api

This is an old revision of the document!


Learnexa GrapphQL API

Implementation

1) Create new Ruby on Rails application

Ruby Verions 2.6.2
Rails verions 5.1.4

rails new learnexa_api -d mysql

2) Add GraphQL in gem file

gem 'graphql', '~>1.8.10'

bundle install

3) Add GraphQL to a Rails app

rails g graphql:install

bundle install

4) Add existing learnexa db in database.yml file

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
  database: learnexa_db

5) Recreate all learnexa models(Sample code given below):

app/models/course.rb

class Course < ApplicationRecord
  has_many :course_contents, -> { order :position }, :dependent => :destroy
  has_many :contents, :through => :course_contents
end

app/models/course_content.rb

class CourseContent < ApplicationRecord
  belongs_to :course
  belongs_to :content
end

app/models/content.rb

class Content < ApplicationRecord
  has_many :course_contents, :dependent => :destroy
  has_many :courses, :through => :course_contents, :class_name => 'Course', :source => :course
end

6) Create course_type.rb file in app/grapghql/types folder:

module Types
  class CourseType < BaseObject
    field :id, ID, null: false
    field :title, String, null: false
    field :course_contents, [Types::CourseContentType], null: false
    field :contents, [Types::ContentType], null: false
  end
end

7) Also create content_type.rb, course_content_type.rb files

content_type.rb

module Types
  class ContentType < BaseObject
    field :id, ID, null: false
    field :title, String, null: false
    field :created_at, String, null: false
    field :updated_at, String, null: false
  end
end

course_content_type.rb

module Types
  class CourseContentType < BaseObject
    field :id, ID, null: false
    field :maximum_attempts, Integer, null: false
    field :course, Types::CourseType, null: false
  end
end

8) In app/grapghql/types/quert_type.rb files add the query methods

module Types
  class QueryType < Types::BaseObject
    field :all_courses, [Types::CourseType], null: false
    field :get_course, CourseType, null: false do
      argument :id, ID, required: true
    end

    def all_courses
      Course.all
    end

    def get_course(id:)
      Course.find(id)
    end
  end
end

9) Build a schema with QueryType as the query entry point:

app/grapghql/learnexa_api_schema.rb

class LearnexaApiSchema < GraphQL::Schema
  mutation Types::MutationType
  query Types::QueryType
end

10) Start rails server Open localhost:3000/graphiql to gew

learnexa_graphql_api.1555664104.txt.gz · Last modified: 2019/04/19 08:55 by 182.72.26.6