feat(promotion code): Promotion code system done
I added the features for users to use promotion code and for promoters to create on their events. May be rewrite to discount code?
This commit is contained in:
@@ -1,14 +1,15 @@
|
||||
class CreateOrders < ActiveRecord::Migration[8.0]
|
||||
def change
|
||||
create_table :orders do |t|
|
||||
t.references :user, null: false, foreign_key: false
|
||||
t.references :event, null: false, foreign_key: false
|
||||
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.references :user, null: false, foreign_key: false
|
||||
t.references :event, null: false, foreign_key: false
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
|
||||
@@ -7,8 +7,12 @@ class CreatePromotionCodes < ActiveRecord::Migration[8.0]
|
||||
t.boolean :active, default: true, null: false
|
||||
t.integer :usage_limit, default: nil
|
||||
t.integer :uses_count, default: 0, null: false
|
||||
t.datetime :created_at, null: false
|
||||
t.datetime :updated_at, null: false
|
||||
|
||||
# Reference user(promoter) who has created the promotion code
|
||||
t.references :user, null: false, foreign_key: true
|
||||
t.references :event, null: false, foreign_key: true
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
||||
# Unique index for code
|
||||
|
||||
10
db/schema.rb
generated
10
db/schema.rb
generated
@@ -44,13 +44,13 @@ ActiveRecord::Schema[8.0].define(version: 2025_09_28_181311) do
|
||||
end
|
||||
|
||||
create_table "orders", charset: "utf8mb4", collation: "utf8mb4_uca1400_ai_ci", force: :cascade do |t|
|
||||
t.bigint "user_id", null: false
|
||||
t.bigint "event_id", null: false
|
||||
t.string "status", default: "draft", null: false
|
||||
t.integer "total_amount_cents", default: 0, null: false
|
||||
t.integer "payment_attempts", default: 0, null: false
|
||||
t.timestamp "expires_at"
|
||||
t.timestamp "last_payment_attempt_at"
|
||||
t.bigint "user_id", null: false
|
||||
t.bigint "event_id", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["event_id", "status"], name: "idx_orders_event_status"
|
||||
@@ -67,9 +67,13 @@ ActiveRecord::Schema[8.0].define(version: 2025_09_28_181311) do
|
||||
t.boolean "active", default: true, null: false
|
||||
t.integer "usage_limit"
|
||||
t.integer "uses_count", default: 0, null: false
|
||||
t.bigint "user_id", null: false
|
||||
t.bigint "event_id", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["code"], name: "index_promotion_codes_on_code", unique: true
|
||||
t.index ["event_id"], name: "index_promotion_codes_on_event_id"
|
||||
t.index ["user_id"], name: "index_promotion_codes_on_user_id"
|
||||
end
|
||||
|
||||
create_table "ticket_types", charset: "utf8mb4", collation: "utf8mb4_uca1400_ai_ci", force: :cascade do |t|
|
||||
@@ -128,4 +132,6 @@ ActiveRecord::Schema[8.0].define(version: 2025_09_28_181311) do
|
||||
|
||||
add_foreign_key "order_promotion_codes", "orders"
|
||||
add_foreign_key "order_promotion_codes", "promotion_codes"
|
||||
add_foreign_key "promotion_codes", "events"
|
||||
add_foreign_key "promotion_codes", "users"
|
||||
end
|
||||
|
||||
23
db/seeds.rb
23
db/seeds.rb
@@ -280,3 +280,26 @@ TicketType.find_or_create_by!(event: belle_epoque_october_event, name: "Entry 10
|
||||
end
|
||||
|
||||
puts "Created 3 additional events from Bizouk with ticket types"
|
||||
|
||||
# Create promotion codes for events
|
||||
# Promotion code for belle_epoque_event
|
||||
PromotionCode.find_or_create_by!(code: "BELLE10") do |pc|
|
||||
pc.discount_amount_cents = 1000 # 10€ discount
|
||||
pc.expires_at = belle_epoque_event.start_time + 1.day
|
||||
pc.active = true
|
||||
pc.usage_limit = 20
|
||||
pc.user = promoter
|
||||
pc.event = belle_epoque_october_event
|
||||
end
|
||||
|
||||
# Promotion code for belle_epoque_october_event
|
||||
PromotionCode.find_or_create_by!(code: "OCTOBRE5") do |pc|
|
||||
pc.discount_amount_cents = 500 # 5€ discount
|
||||
pc.expires_at = belle_epoque_october_event.start_time + 1.day
|
||||
pc.active = true
|
||||
pc.usage_limit = 30
|
||||
pc.user = promoter
|
||||
pc.event = belle_epoque_october_event
|
||||
end
|
||||
|
||||
puts "Created promotion codes for events"
|
||||
|
||||
Reference in New Issue
Block a user