Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 15 additions & 14 deletions app/operations/event_procedures/build_total_amount_cents.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,30 @@ def base_amount_cents
cbhpm_procedure = find_cbhpm_procedure
return 0 unless cbhpm_procedure

port_value = find_port_value(cbhpm_procedure)
return value_for_anesthetic_port_zero(event_procedure) unless port_value
port_value = find_port_value(cbhpm_procedure.anesthetic_port)
return value_for_anesthetic_port_zero unless port_value

port_value.amount_cents.to_i
end

def value_for_anesthetic_port_zero(event_procedure)
port = PortValue.find_by(cbhpm_id: event_procedure.cbhpm_id, anesthetic_port: ANESTHETIC_PORT_ZERO_AMOUNT)
port&.amount_cents.to_i
def value_for_anesthetic_port_zero
port_values_by_anesthetic_port[ANESTHETIC_PORT_ZERO_AMOUNT]&.amount_cents.to_i
end

def find_cbhpm_procedure
CbhpmProcedure.find_by(
procedure_id: event_procedure.procedure_id,
cbhpm_id: event_procedure.cbhpm_id
)
cbhpm_procedures_by_cbhpm_id[event_procedure.cbhpm_id]
end

def find_port_value(cbhpm_procedure)
PortValue.find_by(
cbhpm_id: cbhpm_procedure.cbhpm_id,
anesthetic_port: cbhpm_procedure.anesthetic_port
)
def find_port_value(anesthetic_port)
port_values_by_anesthetic_port[anesthetic_port]
end

def cbhpm_procedures_by_cbhpm_id
@cbhpm_procedures_by_cbhpm_id ||= event_procedure.procedure.cbhpm_procedures.index_by(&:cbhpm_id)
end

def port_values_by_anesthetic_port
@port_values_by_anesthetic_port ||= event_procedure.cbhpm.port_values.index_by(&:anesthetic_port)
end

def apartment_multiplier
Expand Down
3 changes: 2 additions & 1 deletion app/operations/event_procedures/list.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ def filtered_query
:patient,
:hospital,
:health_insurance,
cbhpm: :port_values
cbhpm: :port_values,
procedure: :cbhpm_procedures
)
apply_all_filters(query)
end
Expand Down
15 changes: 15 additions & 0 deletions spec/requests/api/v1/event_procedures_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,21 @@
end
end

context "when checking for N+1 queries" do
it "does not have N+1 queries" do
create_list(:event_procedure, 2, user_id: user.id)
get(path, params: {}, headers: headers) # Warmup

control_count = count_queries { get(path, params: {}, headers: headers) }

create_list(:event_procedure, 5, user_id: user.id)

final_count = count_queries { get(path, params: {}, headers: headers) }

expect(final_count).to be <= control_count
end
end

context "when has filters by month" do
it "returns event_procedures per month" do
create_list(:event_procedure, 3, date: "2023-02-15", user_id: user.id)
Expand Down
16 changes: 16 additions & 0 deletions spec/support/query_counter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module QueryCounter
def count_queries(&)
count = 0
counter_f = lambda { |_name, _started, _finished, _unique_id, payload|
count += 1 unless payload[:name].in? %w[CACHE SCHEMA]
}
ActiveSupport::Notifications.subscribed(counter_f, "sql.active_record", &)
count
end
end

RSpec.configure do |config|
config.include QueryCounter, type: :request
end