Skip to content

Commit f5277b9

Browse files
committed
refactor: Optimize CasaCasesController performance with eager loading and indexing
1 parent e83e849 commit f5277b9

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

app/controllers/casa_cases_controller.rb

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ class CasaCasesController < ApplicationController
66

77
def index
88
authorize CasaCase
9-
org_cases = current_user.casa_org.casa_cases.includes(:assigned_volunteers)
10-
@casa_cases = policy_scope(org_cases).includes([:hearing_type, :judge])
9+
org_cases = current_user.casa_org.casa_cases
10+
.includes(:assigned_volunteers, :volunteer_assignments, :casa_org, :hearing_type, :judge)
11+
.with_attached_court_reports
12+
@casa_cases = policy_scope(org_cases)
1113
@casa_cases_filter_id = policy(CasaCase).can_see_filters? ? "casa-cases" : ""
1214
@duties = OtherDuty.where(creator_id: current_user.id)
1315
end
@@ -131,10 +133,19 @@ def reactivate
131133

132134
def copy_court_orders
133135
authorize @casa_case, :update_court_orders?
134-
CasaCase.find_by_case_number(params[:case_number_cp]).case_court_orders.each do |court_order|
135-
dup_court_order = court_order.dup
136-
dup_court_order.save
137-
@casa_case.case_court_orders.append dup_court_order
136+
source_case = CasaCase.includes(:case_court_orders)
137+
.find_by_case_number(params[:case_number_cp])
138+
139+
return unless source_case
140+
141+
CaseCourtOrder.transaction do
142+
source_case.case_court_orders.each do |court_order|
143+
@casa_case.case_court_orders.create!(
144+
text: court_order.text,
145+
implementation_status: court_order.implementation_status,
146+
court_date_id: court_order.court_date_id
147+
)
148+
end
138149
end
139150
end
140151

@@ -176,8 +187,8 @@ def casa_case_update_params
176187
end
177188

178189
def set_contact_types
179-
@contact_types = current_organization.contact_types
180-
@selected_contact_type_ids = (!@casa_case.nil?) ? @casa_case.contact_type_ids : []
190+
@contact_types = current_organization.contact_types.includes(:contact_type_group)
191+
@selected_contact_type_ids = @casa_case&.contact_type_ids || []
181192
end
182193

183194
def case_contact_csv_name(case_contacts)

db/schema.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@
135135
t.index ["casa_org_id"], name: "index_casa_cases_on_casa_org_id"
136136
t.index ["case_number", "casa_org_id"], name: "index_casa_cases_on_case_number_and_casa_org_id", unique: true
137137
t.index ["slug"], name: "index_casa_cases_on_slug"
138+
t.index ["active"], name: "index_casa_cases_on_active"
139+
t.index ["court_report_due_date"], name: "index_casa_cases_on_court_report_due_date"
140+
t.index ["court_report_status"], name: "index_casa_cases_on_court_report_status"
138141
end
139142

140143
create_table "casa_cases_emancipation_options", force: :cascade do |t|

0 commit comments

Comments
 (0)