diff --git a/app/graphql/sources/active_record.rb b/app/graphql/sources/active_record.rb new file mode 100644 index 0000000..09e008a --- /dev/null +++ b/app/graphql/sources/active_record.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Sources + class ActiveRecord < GraphQL::Dataloader::Source + # rubocop:disable Lint/MissingSuper + def initialize(model_class) + @model_class = model_class + end + + def fetch(ids) + @model_class + .where(id: ids) + .index_by(&:id) + .slice(*ids) + .values + end + end +end diff --git a/app/graphql/types/balance_type.rb b/app/graphql/types/balance_type.rb index f1a3e09..8af921f 100644 --- a/app/graphql/types/balance_type.rb +++ b/app/graphql/types/balance_type.rb @@ -7,7 +7,11 @@ module Types graphql_name "Balance" field :id, ID, null: false - field :currency, CurrencyType, null: false field :amount, String, null: false + + field :currency, CurrencyType, null: false + def currency + dataloader.with(Sources::ActiveRecord, Currency).load(object.currency_id) + end end end diff --git a/app/graphql/x_stake_schema.rb b/app/graphql/x_stake_schema.rb index b89bdee..8e5f10d 100644 --- a/app/graphql/x_stake_schema.rb +++ b/app/graphql/x_stake_schema.rb @@ -2,6 +2,7 @@ class XStakeSchema < GraphQL::Schema # mutation(Types::MutationType) query(Types::QueryType) + use GraphQL::Dataloader def self.resolve_type(abstract_type, obj, ctx) case obj