add subjects and reviwers query

This commit is contained in:
João Geonizeli
2022-07-21 14:57:57 -03:00
parent 1bca4dbf82
commit d38acaab98
9 changed files with 110 additions and 2 deletions

View File

@@ -0,0 +1,17 @@
# frozen_string_literal: true
module Resolvers
class ReviewersQueryResolver
def initialize(context)
@context = context
end
def resolve
UserPolicy::Scope.new(@context[:current_user], User)
.resolve
.joins(:roles)
.where(roles: { name: %i[teacher nde] })
.where.not(id: @context[:current_user].id)
.distinct
end
end
end

View File

@@ -0,0 +1,12 @@
# frozen_string_literal: true
module Resolvers
class SubjectsQueryResolver
def initialize(context)
@context = context
end
def resolve
SubjectPolicy::Scope.new(@context[:current_user], Subject).resolve
end
end
end

View File

@@ -0,0 +1,14 @@
# frozen_string_literal: true
module Sources
class ActiveRecord < GraphQL::Dataloader::Source
def initialize(model_class)
@model_class = model_class
end
def fetch(ids)
records = @model_class.where(id: ids).index_by(&:id)
records.slice(*ids).values
end
end
end

View File

@@ -0,0 +1,9 @@
# frozen_string_literal: true
module Types
class AxisType < Types::BaseObject
field :id, ID, null: false
field :name, String, null: false
field :subjects, [SubjectType], null: false
end
end

View File

@@ -0,0 +1,9 @@
# frozen_string_literal: true
module Types
class CategoryType < Types::BaseObject
field :id, ID, null: false
field :name, String, null: false
field :subjects, [SubjectType], null: false
end
end

View File

@@ -1,19 +1,27 @@
module Types
class QueryType < Types::BaseObject
# Add `node(id: ID!) and `nodes(ids: [ID!]!)`
include GraphQL::Types::Relay::HasNodeField
include GraphQL::Types::Relay::HasNodesField
field :questions, QuestionType.connection_type, null: false do
argument :where, Inputs::QuestionWhereInput, required: false
end
field :subjects, SubjectType.connection_type, null: false
field :reviewers, UserType.connection_type, null: false
field :current_user, Types::UserType, null: true
def questions(where: nil)
Resolvers::QuestionsQueryResolver.new(Question, context: context, where: where).resolve
end
def subjects
Resolvers::SubjectsQueryResolver.new(context).resolve
end
def reviewers
Resolvers::ReviewersQueryResolver.new(context).resolve
end
def current_user
context[:current_user]
end

View File

@@ -0,0 +1,25 @@
# frozen_string_literal: true
module Types
class SubjectType < Types::BaseObject
field :id, ID, null: false
field :name, String, null: false
field :axis, AxisType, null: false
def axis
dataloader.with(Sources::ActiveRecord, Axis).load(object.axis_id)
end
field :category, CategoryType, null: false
def category
dataloader.with(Sources::ActiveRecord, Category).load(object.category_id)
end
field :questions, QuestionType.connection_type, null: false do
argument :where, Inputs::QuestionWhereInput, required: false
end
def questions(where: nil)
Resolvers::QuestionsQueryResolver.new(object.questions, context: context, where: where).resolve
end
end
end