Get Party ready for preview state
* Added new fields for preview state and generated_at timestamp * Add preview state enum to model * Add preview_relevant_changes? after_commit hook
This commit is contained in:
parent
74b59efd5f
commit
a55ea1e50f
3 changed files with 38 additions and 2 deletions
|
|
@ -105,6 +105,15 @@ class Party < ApplicationRecord
|
|||
|
||||
attr_accessor :favorited
|
||||
|
||||
self.enum :preview_state, {
|
||||
pending: 0, # Never generated
|
||||
queued: 1, # Generation job scheduled
|
||||
generated: 2, # Has preview image
|
||||
failed: 3 # Generation failed
|
||||
}
|
||||
|
||||
after_commit :schedule_preview_regeneration, if: :preview_relevant_changes?
|
||||
|
||||
def is_favorited(user)
|
||||
user.favorite_parties.include? self if user
|
||||
end
|
||||
|
|
@ -177,4 +186,18 @@ class Party < ApplicationRecord
|
|||
|
||||
errors.add(:guidebooks, 'must be unique')
|
||||
end
|
||||
|
||||
def preview_relevant_changes?
|
||||
return false if preview_state == 'queued'
|
||||
|
||||
(saved_changes.keys & %w[name job_id element weapons_count characters_count summons_count]).any?
|
||||
end
|
||||
|
||||
def schedule_preview_regeneration
|
||||
# Cancel any pending jobs
|
||||
GeneratePartyPreviewJob.cancel_scheduled_jobs(party_id: id)
|
||||
|
||||
# Mark as pending
|
||||
update_column(:preview_state, :pending)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
class AddPreviewColumnsToParties < ActiveRecord::Migration[8.0]
|
||||
def change
|
||||
add_column :parties, :preview_state, :integer, default: 0, null: false
|
||||
add_column :parties, :preview_generated_at, :datetime
|
||||
|
||||
add_index :parties, :preview_state
|
||||
add_index :parties, :preview_generated_at
|
||||
end
|
||||
end
|
||||
|
|
@ -10,12 +10,12 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.0].define(version: 2025_01_15_100356) do
|
||||
ActiveRecord::Schema[8.0].define(version: 2025_01_18_135254) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "btree_gin"
|
||||
enable_extension "pg_catalog.plpgsql"
|
||||
enable_extension "pg_trgm"
|
||||
enable_extension "pgcrypto"
|
||||
enable_extension "plpgsql"
|
||||
enable_extension "uuid-ossp"
|
||||
|
||||
create_table "app_updates", primary_key: "updated_at", id: :datetime, force: :cascade do |t|
|
||||
|
|
@ -300,11 +300,15 @@ ActiveRecord::Schema[7.0].define(version: 2025_01_15_100356) do
|
|||
t.boolean "auto_summon", default: false
|
||||
t.boolean "remix", default: false, null: false
|
||||
t.integer "visibility", default: 1, null: false
|
||||
t.integer "preview_state", default: 0, null: false
|
||||
t.datetime "preview_generated_at"
|
||||
t.index ["accessory_id"], name: "index_parties_on_accessory_id"
|
||||
t.index ["guidebook1_id"], name: "index_parties_on_guidebook1_id"
|
||||
t.index ["guidebook2_id"], name: "index_parties_on_guidebook2_id"
|
||||
t.index ["guidebook3_id"], name: "index_parties_on_guidebook3_id"
|
||||
t.index ["job_id"], name: "index_parties_on_job_id"
|
||||
t.index ["preview_generated_at"], name: "index_parties_on_preview_generated_at"
|
||||
t.index ["preview_state"], name: "index_parties_on_preview_state"
|
||||
t.index ["skill0_id"], name: "index_parties_on_skill0_id"
|
||||
t.index ["skill1_id"], name: "index_parties_on_skill1_id"
|
||||
t.index ["skill2_id"], name: "index_parties_on_skill2_id"
|
||||
|
|
|
|||
Loading…
Reference in a new issue