Files
netig.net/db/migrations/003_create_memberships.rb
T
2026-11-03 10:47:07 +01:00

51 lines
1.3 KiB
Ruby

Sequel.migration do
up do
create_table(:memberships) do
primary_key :id, type: :Bignum
foreign_key :member_id, :members,
type: :Bignum,
null: false,
on_delete: :cascade
String :status, null: false, default: "pending"
DateTime :requested_at,
null: false,
default: Sequel::CURRENT_TIMESTAMP
DateTime :decided_at
foreign_key :recorded_by, :members,
type: :Bignum,
null: true,
on_delete: :set_null
index :member_id, name: :memberships_member_id_all_index
index :recorded_by
index :status
# Un seul dossier en attente ou une seule adhésion acceptée.
index :member_id,
unique: true,
name: :memberships_active_member_id_index,
where: { status: ["pending", "accepted"] }
constraint :memberships_status_valid,
Sequel.lit("status IN ('pending', 'accepted', 'rejected')")
constraint :memberships_decision_consistent,
Sequel.lit(
"(status = 'pending' AND decided_at IS NULL " \
"AND recorded_by IS NULL) " \
"OR (status IN ('accepted', 'rejected') " \
"AND decided_at IS NOT NULL)"
)
end
end
down do
drop_table(:memberships)
end
end