Merge pull request 'Recreate simulations whenever a guest changes their attendance' (#85) from simulations-lifecycle into main
Reviewed-on: #85
This commit is contained in:
commit
c2989b216f
@ -26,7 +26,7 @@ class GuestsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def bulk_update
|
def bulk_update
|
||||||
Guest.where(id: params[:guest_ids]).update!(params.require(:properties).permit(:status))
|
Guests::UpdateUseCase.new(guest_ids: params[:guest_ids], params: params.require(:properties).permit(:status)).call
|
||||||
render json: {}, status: :ok
|
render json: {}, status: :ok
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -9,7 +9,7 @@ class TableSimulatorJob < ApplicationJob
|
|||||||
engine.add_perturbation(Tables::Swap)
|
engine.add_perturbation(Tables::Swap)
|
||||||
|
|
||||||
initial_solution = Tables::Distribution.new(min_per_table: 8, max_per_table: 10)
|
initial_solution = Tables::Distribution.new(min_per_table: 8, max_per_table: 10)
|
||||||
initial_solution.random_distribution(Guest.all.shuffle)
|
initial_solution.random_distribution(Guest.potential.shuffle)
|
||||||
|
|
||||||
engine.initial_solution = initial_solution
|
engine.initial_solution = initial_solution
|
||||||
|
|
||||||
|
@ -8,9 +8,11 @@ class Guest < ApplicationRecord
|
|||||||
invited: 10,
|
invited: 10,
|
||||||
confirmed: 20,
|
confirmed: 20,
|
||||||
declined: 30,
|
declined: 30,
|
||||||
tentative: 40,
|
tentative: 40
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scope :potential, -> { where.not(status: %i[declined considered]) }
|
||||||
|
|
||||||
def full_name
|
def full_name
|
||||||
"#{first_name} #{last_name}"
|
"#{first_name} #{last_name}"
|
||||||
end
|
end
|
||||||
|
14
app/use_cases/guests/update_use_case.rb
Normal file
14
app/use_cases/guests/update_use_case.rb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Copyright (C) 2024 Manuel Bustillo
|
||||||
|
|
||||||
|
module Guests
|
||||||
|
class UpdateUseCase
|
||||||
|
def initialize(guest_ids:, params:)
|
||||||
|
Guest.where(id: guest_ids).update!(params)
|
||||||
|
|
||||||
|
# TODO: Not all status transitions may require a table re-arrangement
|
||||||
|
TablesArrangement.delete_all
|
||||||
|
|
||||||
|
ActiveJob.perform_all_later(50.times.map { TableSimulatorJob.new })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user