41 lines
1.1 KiB
Ruby
41 lines
1.1 KiB
Ruby
Sequel.migration do
|
|
up do
|
|
create_table(:members) do
|
|
primary_key :id, type: :Bignum
|
|
|
|
foreign_key :account_id, :accounts,
|
|
type: :Bignum,
|
|
null: false
|
|
|
|
String :kind, null: false
|
|
String :first_name
|
|
String :last_name
|
|
String :organization_name
|
|
|
|
TrueClass :core_member, null: false, default: false
|
|
|
|
index :account_id, unique: true
|
|
|
|
constraint :members_kind_valid,
|
|
Sequel.lit("kind IN ('individual', 'organization')")
|
|
|
|
constraint :members_identity_matches_kind,
|
|
Sequel.lit(
|
|
"(kind = 'individual' AND first_name IS NOT NULL " \
|
|
"AND trim(first_name) <> '' AND last_name IS NOT NULL " \
|
|
"AND trim(last_name) <> '' AND organization_name IS NULL) " \
|
|
"OR (kind = 'organization' AND first_name IS NULL " \
|
|
"AND last_name IS NULL AND organization_name IS NOT NULL " \
|
|
"AND trim(organization_name) <> '')"
|
|
)
|
|
|
|
constraint :members_core_member_individual,
|
|
Sequel.lit("core_member = FALSE OR kind = 'individual'")
|
|
end
|
|
end
|
|
|
|
down do
|
|
drop_table(:members)
|
|
end
|
|
end
|