Class: WorkerPlugins::SwitchQuery

Inherits:
ApplicationService show all
Defined in:
app/services/worker_plugins/switch_query.rb

Instance Method Summary collapse

Methods inherited from ApplicationService

#db_now_value, #postgres?, #quote, #quote_column, #quote_table, #sqlite?

Instance Method Details

#ids_added_alreadyObject



26
27
28
29
30
31
32
# File 'app/services/worker_plugins/switch_query.rb', line 26

def ids_added_already
  WorkerPlugins::SelectColumnWithTypeCast.execute!(
    column_name_to_select: :resource_id,
    column_to_compare_with: model_class.column_for_attribute(:id),
    query: ids_added_already_query
  )
end

#ids_added_already_queryObject



20
21
22
23
24
# File 'app/services/worker_plugins/switch_query.rb', line 20

def ids_added_already_query
  workplace
    .workplace_links
    .where(resource_type: model_class.name, resource_id: query_with_selected_ids)
end

#model_classObject



34
35
36
# File 'app/services/worker_plugins/switch_query.rb', line 34

def model_class
  @model_class ||= query.klass
end

#performObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'app/services/worker_plugins/switch_query.rb', line 4

def perform
  if resources_to_add.count.zero?
    result = WorkerPlugins::RemoveQuery.execute!(query:, workplace:)
    succeed!(
      destroyed: result.fetch(:destroyed),
      mode: :destroyed
    )
  else
    result = WorkerPlugins::AddQuery.execute!(query:, workplace:)
    succeed!(
      created: result.fetch(:created),
      mode: :created
    )
  end
end

#query_with_selected_idsObject



38
39
40
41
42
43
44
# File 'app/services/worker_plugins/switch_query.rb', line 38

def query_with_selected_ids
  WorkerPlugins::SelectColumnWithTypeCast.execute!(
    column_name_to_select: :id,
    column_to_compare_with: WorkerPlugins::WorkplaceLink.column_for_attribute(:resource_id),
    query:
  )
end

#resources_to_addObject



46
47
48
# File 'app/services/worker_plugins/switch_query.rb', line 46

def resources_to_add
  @resources_to_add ||= query.where.not(id: ids_added_already)
end