- Add 30-minute expiry window for draft tickets with automatic cleanup - Implement 3-attempt payment retry mechanism with tracking - Create background job for cleaning expired draft tickets every 10 minutes - Add comprehensive UI warnings for expiring tickets and retry attempts - Enhance dashboard to display pending draft tickets with retry options - Add payment cancellation handling with smart retry redirections - Include rake tasks for manual cleanup and statistics - Add database fields: expires_at, payment_attempts, last_payment_attempt_at, stripe_session_id - Fix payment attempt counter display to show correct attempt number (1/3, 2/3, 3/3)
39 lines
1.3 KiB
Ruby
Executable File
39 lines
1.3 KiB
Ruby
Executable File
class CreateTickets < ActiveRecord::Migration[8.0]
|
|
def change
|
|
create_table :tickets do |t|
|
|
t.string :qr_code
|
|
t.integer :price_cents
|
|
t.string :status, default: "draft"
|
|
|
|
# Add names to ticket
|
|
t.string :first_name
|
|
t.string :last_name
|
|
|
|
# Implemented to "temporize" tickets
|
|
# If a ticket is not paid in time, it is removed from the database
|
|
#
|
|
t.string :stripe_session_id
|
|
t.timestamp :expires_at
|
|
t.integer :payment_attempts, default: 0
|
|
t.timestamp :last_payment_attempt_at
|
|
|
|
t.references :user, null: true, foreign_key: false
|
|
t.references :ticket_type, null: false, foreign_key: false
|
|
|
|
t.timestamps
|
|
end
|
|
|
|
add_index :tickets, :qr_code, unique: true
|
|
add_index :tickets, :user_id unless index_exists?(:tickets, :user_id)
|
|
add_index :tickets, :ticket_type_id unless index_exists?(:tickets, :ticket_type_id)
|
|
|
|
# Add indexes for better performance
|
|
# add_index :tickets, :first_name unless index_exists?(:tickets, :first_name)
|
|
# add_index :tickets, :last_name unless index_exists?(:tickets, :last_name)
|
|
#
|
|
# add_index :tickets, :stripe_session_id, unique: true
|
|
# add_index :tickets, [ :status, :expires_at ]
|
|
# add_index :tickets, [ :user_id, :status ]
|
|
end
|
|
end
|