From 386f52aff41726dfb0e5647f70d3a7b7c77451d1 Mon Sep 17 00:00:00 2001 From: Daniel Nottingham Date: Sat, 21 Mar 2026 19:01:34 -0300 Subject: [PATCH] refactor: standardize operations consistency --- .../association_resolvable.rb | 17 ++++++++++++++++ app/operations/event_procedures/create.rb | 20 +++++-------------- app/operations/event_procedures/update.rb | 14 ++----------- app/operations/medical_shifts/update.rb | 8 +++++++- spec/operations/medical_shifts/update_spec.rb | 8 ++++++++ 5 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 app/operations/event_procedures/association_resolvable.rb diff --git a/app/operations/event_procedures/association_resolvable.rb b/app/operations/event_procedures/association_resolvable.rb new file mode 100644 index 00000000..d957d9cc --- /dev/null +++ b/app/operations/event_procedures/association_resolvable.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module EventProcedures + module AssociationResolvable + def find_or_create_patient(patient_attributes) + Patients::FindOrCreate.result(params: patient_attributes).patient + end + + def find_or_create_procedure(procedure_attributes) + Procedures::FindOrCreate.result(params: procedure_attributes).procedure + end + + def find_or_create_health_insurance(health_insurance_attributes) + HealthInsurances::FindOrCreate.result(params: health_insurance_attributes).health_insurance + end + end +end diff --git a/app/operations/event_procedures/create.rb b/app/operations/event_procedures/create.rb index 632acad1..2ceafcb3 100644 --- a/app/operations/event_procedures/create.rb +++ b/app/operations/event_procedures/create.rb @@ -2,6 +2,8 @@ module EventProcedures class Create < Actor + include AssociationResolvable + input :attributes, type: Hash input :user_id, type: Integer @@ -35,9 +37,9 @@ def create_event_procedure end def event_procedure_attributes - patient = find_or_create_patient - procedure = find_or_create_procedure - health_insurance = find_or_create_health_insurance + patient = find_or_create_patient(attributes[:patient_attributes]) + procedure = find_or_create_procedure(attributes[:procedure_attributes]) + health_insurance = find_or_create_health_insurance(attributes[:health_insurance_attributes]) validate_procedure(procedure) validate_health_insurance(health_insurance) @@ -73,18 +75,6 @@ def merge_attributes(patient, procedure, health_insurance) ) end - def find_or_create_health_insurance - HealthInsurances::FindOrCreate.result(params: attributes[:health_insurance_attributes]).health_insurance - end - - def find_or_create_patient - Patients::FindOrCreate.result(params: attributes[:patient_attributes]).patient - end - - def find_or_create_procedure - Procedures::FindOrCreate.result(params: attributes[:procedure_attributes]).procedure - end - def log_success Rails.logger.info( ">>> EventProcedure created successfully. ID: #{event_procedure.id}, User ID: #{user_id}" diff --git a/app/operations/event_procedures/update.rb b/app/operations/event_procedures/update.rb index 356e63d7..bedcef50 100644 --- a/app/operations/event_procedures/update.rb +++ b/app/operations/event_procedures/update.rb @@ -2,6 +2,8 @@ module EventProcedures class Update < Actor + include AssociationResolvable + input :id, type: String input :attributes, type: Hash @@ -22,18 +24,6 @@ def find_event_procedure EventProcedures::Find.result(id: id).event_procedure end - def find_or_create_patient(patient_attributes) - Patients::FindOrCreate.result(params: patient_attributes).patient - end - - def find_or_create_procedure(procedure_attributes) - Procedures::FindOrCreate.result(params: procedure_attributes).procedure - end - - def find_or_create_health_insurance(health_insurance_attributes) - HealthInsurances::FindOrCreate.result(params: health_insurance_attributes).health_insurance - end - def handle_update_procedure(event_procedure) event_procedure.assign_attributes(handled_attributes) total_amount_cents = recalculated_total_amount(event_procedure) diff --git a/app/operations/medical_shifts/update.rb b/app/operations/medical_shifts/update.rb index fcd2dbc3..146bbf67 100644 --- a/app/operations/medical_shifts/update.rb +++ b/app/operations/medical_shifts/update.rb @@ -8,9 +8,15 @@ class Update < Actor output :medical_shift, type: MedicalShift def call - self.medical_shift = MedicalShift.find(id) + self.medical_shift = find_medical_shift fail!(error: :invalid_record) unless medical_shift.update(attributes) end + + private + + def find_medical_shift + MedicalShifts::Find.result(id: id).medical_shift + end end end diff --git a/spec/operations/medical_shifts/update_spec.rb b/spec/operations/medical_shifts/update_spec.rb index 7ecef265..a5bba00b 100644 --- a/spec/operations/medical_shifts/update_spec.rb +++ b/spec/operations/medical_shifts/update_spec.rb @@ -24,6 +24,14 @@ end end + context "when medical_shift with given id does not exist" do + it "raises ActiveRecord::RecordNotFound" do + expect do + described_class.result(id: "non-existent-id", attributes: {}) + end.to raise_error(ActiveRecord::RecordNotFound) + end + end + context "with invalid attributes" do it "is failure" do medical_shift = create(:medical_shift, workload: MedicalShifts::Workloads::SIX)