wip: order checkout

This commit is contained in:
kbe
2025-09-02 02:56:23 +02:00
parent afe074c8a1
commit ca81d2360c
18 changed files with 893 additions and 292 deletions

View File

@@ -8,6 +8,8 @@ class CreateTicketTypes < ActiveRecord::Migration[8.0]
t.datetime :sale_start_at
t.datetime :sale_end_at
t.integer :minimum_age
t.boolean :requires_id, default: false, null: false
t.references :event, null: false, foreign_key: false
t.timestamps

View File

@@ -0,0 +1,20 @@
class CreateOrders < ActiveRecord::Migration[8.0]
def change
create_table :orders do |t|
t.references :user, null: false, foreign_key: true
t.references :event, null: false, foreign_key: true
t.string :status, null: false, default: 'draft'
t.integer :total_amount_cents, null: false, default: 0
t.integer :payment_attempts, null: false, default: 0
t.timestamp :expires_at
t.timestamp :last_payment_attempt_at
t.timestamps
end
# Indexes for performance
add_index :orders, [:user_id, :status], name: 'idx_orders_user_status'
add_index :orders, [:event_id, :status], name: 'idx_orders_event_status'
add_index :orders, :expires_at, name: 'idx_orders_expires_at'
end
end

View File

@@ -9,30 +9,13 @@ class CreateTickets < ActiveRecord::Migration[8.0]
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
# Tickets belong to orders (orders handle payment logic)
t.references :order, null: false, foreign_key: true
t.references :ticket_type, null: false, foreign_key: true
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

View File

@@ -1,5 +0,0 @@
class AddRequiresIdToTicketTypes < ActiveRecord::Migration[8.0]
def change
add_column :ticket_types, :requires_id, :boolean, default: false, null: false
end
end