# Copyright (C) 2024 Manuel Bustillo # == Schema Information # # Table name: guests # # id :uuid not null, primary key # name :string # phone :string # status :integer default("considered") # created_at :datetime not null # updated_at :datetime not null # group_id :uuid not null # # Indexes # # index_guests_on_group_id (group_id) # # Foreign Keys # # fk_rails_... (group_id => groups.id) # class Guest < ApplicationRecord belongs_to :group enum :status, { considered: 0, invited: 10, confirmed: 20, declined: 30, tentative: 40 }, validate: true validates :name, presence: true scope :potential, -> { where.not(status: %i[declined considered]) } after_save :recalculate_simulations, if: :saved_change_to_status? after_destroy :recalculate_simulations has_many :seats, dependent: :delete_all private def recalculate_simulations TablesArrangement.delete_all ActiveJob.perform_all_later(50.times.map { TableSimulatorJob.new }) end end