88 lines
3.2 KiB
Ruby
88 lines
3.2 KiB
Ruby
|
Sequel.migration do
|
||
|
up do
|
||
|
SequelRails::connection.run 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"'
|
||
|
|
||
|
create_table :groups do
|
||
|
Uuid :id, primary_key: true, default: Sequel.lit('uuid_generate_v4()')
|
||
|
# INFO: name is the name of the group from a database point of view
|
||
|
String :name, null: false
|
||
|
# INFO: display_name is the name of the group from a user point of view
|
||
|
String :display_name, null: false
|
||
|
# INFO: database_role is the PostgreSQL role. It should not be needed from editor, stored as preventive measure
|
||
|
String :database_role, null: false
|
||
|
Uuid :organization_id, null: false
|
||
|
DateTime :created_at, default: Sequel::CURRENT_TIMESTAMP
|
||
|
DateTime :updated_at, default: Sequel::CURRENT_TIMESTAMP
|
||
|
end
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "groups"
|
||
|
ADD CONSTRAINT groups_organization_id_fk
|
||
|
FOREIGN KEY (organization_id)
|
||
|
REFERENCES organizations(id)
|
||
|
ON DELETE CASCADE
|
||
|
})
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "groups"
|
||
|
ADD CONSTRAINT groups_organization_id_name_uq
|
||
|
UNIQUE (organization_id, name)
|
||
|
})
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "groups"
|
||
|
ADD CONSTRAINT groups_organization_id_display_name_uq
|
||
|
UNIQUE (organization_id, display_name)
|
||
|
})
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "groups"
|
||
|
ADD CONSTRAINT groups_organization_id_database_role_uq
|
||
|
UNIQUE (organization_id, database_role)
|
||
|
})
|
||
|
|
||
|
create_table :users_groups do
|
||
|
Uuid :id, primary_key: true, default: Sequel.lit('uuid_generate_v4()')
|
||
|
Uuid :user_id, null: false
|
||
|
Uuid :group_id, null: false
|
||
|
end
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "users_groups"
|
||
|
ADD CONSTRAINT users_groups_user_id_fk
|
||
|
FOREIGN KEY (user_id)
|
||
|
REFERENCES users(id)
|
||
|
ON DELETE CASCADE
|
||
|
})
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "users_groups"
|
||
|
ADD CONSTRAINT users_groups_group_id_fk
|
||
|
FOREIGN KEY (group_id)
|
||
|
REFERENCES groups(id)
|
||
|
ON DELETE CASCADE
|
||
|
})
|
||
|
|
||
|
SequelRails.connection.run(%Q{
|
||
|
ALTER TABLE "users_groups"
|
||
|
ADD CONSTRAINT users_groups_user_id_group_id_uq
|
||
|
UNIQUE (user_id, group_id)
|
||
|
})
|
||
|
|
||
|
# PosgreSQL won't get ALTER CONSTRAINT until 9.4
|
||
|
#run "ALTER TABLE shared_entities ALTER CONSTRAINT recipient_type_check CHECK (recipient_type IN ('user', 'org', 'group'));"
|
||
|
run "ALTER TABLE shared_entities DROP CONSTRAINT recipient_type_check;"
|
||
|
run "ALTER TABLE shared_entities ADD CONSTRAINT recipient_type_check CHECK (recipient_type IN ('user', 'org', 'group'));"
|
||
|
end
|
||
|
|
||
|
down do
|
||
|
#run "ALTER TABLE shared_entities ALTER CONSTRAINT recipient_type_check CHECK (recipient_type IN ('user', 'org'));"
|
||
|
run "ALTER TABLE shared_entities DROP CONSTRAINT recipient_type_check;"
|
||
|
run "delete from shared_entities where recipient_type = 'group';"
|
||
|
run "ALTER TABLE shared_entities ADD CONSTRAINT recipient_type_check CHECK (recipient_type IN ('user', 'org'));"
|
||
|
|
||
|
drop_table :users_groups
|
||
|
drop_table :groups
|
||
|
end
|
||
|
end
|