Module: Quail::Resource::MutationBuilder::Resolvers

Defined in:
lib/quail/resource/mutation_builder/resolvers.rb

Overview

Runtime resolve logic for auto-generated mutations.

Class Method Summary collapse

Class Method Details

.create(model, name, subs, gql_context, attrs) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/quail/resource/mutation_builder/resolvers.rb', line 8

def self.create(model, name, subs, gql_context, attrs)
  record = model.new(attrs)
  return { name.to_sym => nil, errors: record.errors.full_messages } unless record.save

  MutationBuilder.trigger_subscription(gql_context, subs, :create, name, record)
  { name.to_sym => record, errors: [] }
end

.delete(model, name, subs, gql_context, id) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/quail/resource/mutation_builder/resolvers.rb', line 29

def self.delete(model, name, subs, gql_context, id)
  record = model.find_by(id: id)
  return { success: false, errors: ["#{model.name} not found"] } unless record

  snapshot = MutationBuilder.capture_delete_snapshot(subs, record)
  return { success: false, errors: record.errors.full_messages } unless record.destroy

  MutationBuilder.trigger_delete_event(gql_context, name, snapshot)
  { success: true, errors: [] }
end

.update(model, name, subs, gql_context, params) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/quail/resource/mutation_builder/resolvers.rb', line 16

def self.update(model, name, subs, gql_context, params)
  record = model.find_by(id: params[:id])
  return { name.to_sym => nil, errors: ["#{model.name} not found"] } unless record

  unless record.update(params[:attrs].compact)
    return { name.to_sym => nil,
             errors: record.errors.full_messages }
  end

  MutationBuilder.trigger_subscription(gql_context, subs, :update, name, record)
  { name.to_sym => record, errors: [] }
end