cartodb-4.42/db/migrate/20150917074433_groups.rb

88 lines
3.2 KiB
Ruby
Raw Normal View History

2024-04-06 13:25:13 +08:00
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