182 lines
7.5 KiB
Rust
182 lines
7.5 KiB
Rust
|
use sea_orm_migration::prelude::*;
|
||
|
|
||
|
#[derive(DeriveMigrationName)]
|
||
|
pub struct Migration;
|
||
|
|
||
|
#[async_trait::async_trait]
|
||
|
impl MigrationTrait for Migration {
|
||
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||
|
let db = manager.get_connection();
|
||
|
|
||
|
db.execute_unprepared(
|
||
|
r#"
|
||
|
DELETE FROM "antenna" WHERE "src" = 'group';
|
||
|
|
||
|
ALTER TYPE "antenna_src_enum" RENAME TO "antenna_src_enum_old";
|
||
|
CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'users', 'list', 'instances');
|
||
|
ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum" USING "src"::text::antenna_src_enum;
|
||
|
DROP TYPE "antenna_src_enum_old";
|
||
|
|
||
|
ALTER TABLE "antenna" DROP COLUMN "userGroupJoiningId";
|
||
|
|
||
|
ALTER TABLE "notification" DROP COLUMN "userGroupInvitationId";
|
||
|
|
||
|
ALTER TABLE "user_profile" ALTER COLUMN "emailNotificationTypes"
|
||
|
SET DEFAULT '["follow", "receiveFollowRequest"]'::jsonb;
|
||
|
|
||
|
DROP TABLE "user_group_invitation";
|
||
|
DROP TABLE "user_group_joining";
|
||
|
DROP TABLE "user_group_invite";
|
||
|
DROP TABLE "user_group";
|
||
|
"#,
|
||
|
)
|
||
|
.await?;
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||
|
let db = manager.get_connection();
|
||
|
|
||
|
db.execute_unprepared(
|
||
|
r#"
|
||
|
create table user_group
|
||
|
(
|
||
|
id varchar(32) not null
|
||
|
constraint "PK_3c29fba6fe013ec8724378ce7c9"
|
||
|
primary key,
|
||
|
"createdAt" timestamp with time zone not null,
|
||
|
name varchar(256) not null,
|
||
|
"userId" varchar(32) not null
|
||
|
constraint "FK_3d6b372788ab01be58853003c93"
|
||
|
references "user"
|
||
|
on delete cascade,
|
||
|
"isPrivate" boolean default false not null
|
||
|
);
|
||
|
|
||
|
comment on column user_group."createdAt" is 'The created date of the UserGroup.';
|
||
|
|
||
|
comment on column user_group."userId" is 'The ID of owner.';
|
||
|
|
||
|
create index "IDX_20e30aa35180e317e133d75316"
|
||
|
on user_group ("createdAt");
|
||
|
|
||
|
create index "IDX_3d6b372788ab01be58853003c9"
|
||
|
on user_group ("userId");
|
||
|
|
||
|
create table user_group_invitation
|
||
|
(
|
||
|
id varchar(32) not null
|
||
|
constraint "PK_160c63ec02bf23f6a5c5e8140d6"
|
||
|
primary key,
|
||
|
"createdAt" timestamp with time zone not null,
|
||
|
"userId" varchar(32) not null
|
||
|
constraint "FK_bfbc6305547539369fe73eb144a"
|
||
|
references "user"
|
||
|
on delete cascade,
|
||
|
"userGroupId" varchar(32) not null
|
||
|
constraint "FK_5cc8c468090e129857e9fecce5a"
|
||
|
references user_group
|
||
|
on delete cascade
|
||
|
);
|
||
|
|
||
|
comment on column user_group_invitation."createdAt" is 'The created date of the UserGroupInvitation.';
|
||
|
|
||
|
comment on column user_group_invitation."userId" is 'The user ID.';
|
||
|
|
||
|
comment on column user_group_invitation."userGroupId" is 'The group ID.';
|
||
|
|
||
|
create index "IDX_bfbc6305547539369fe73eb144"
|
||
|
on user_group_invitation ("userId");
|
||
|
|
||
|
create index "IDX_5cc8c468090e129857e9fecce5"
|
||
|
on user_group_invitation ("userGroupId");
|
||
|
|
||
|
create unique index "IDX_e9793f65f504e5a31fbaedbf2f"
|
||
|
on user_group_invitation ("userId", "userGroupId");
|
||
|
|
||
|
create table user_group_joining
|
||
|
(
|
||
|
id varchar(32) not null
|
||
|
constraint "PK_15f2425885253c5507e1599cfe7"
|
||
|
primary key,
|
||
|
"createdAt" timestamp with time zone not null,
|
||
|
"userId" varchar(32) not null
|
||
|
constraint "FK_f3a1b4bd0c7cabba958a0c0b231"
|
||
|
references "user"
|
||
|
on delete cascade,
|
||
|
"userGroupId" varchar(32) not null
|
||
|
constraint "FK_67dc758bc0566985d1b3d399865"
|
||
|
references user_group
|
||
|
on delete cascade
|
||
|
);
|
||
|
|
||
|
comment on column user_group_joining."createdAt" is 'The created date of the UserGroupJoining.';
|
||
|
|
||
|
comment on column user_group_joining."userId" is 'The user ID.';
|
||
|
|
||
|
comment on column user_group_joining."userGroupId" is 'The group ID.';
|
||
|
|
||
|
create index "IDX_f3a1b4bd0c7cabba958a0c0b23"
|
||
|
on user_group_joining ("userId");
|
||
|
|
||
|
create index "IDX_67dc758bc0566985d1b3d39986"
|
||
|
on user_group_joining ("userGroupId");
|
||
|
|
||
|
create unique index "IDX_d9ecaed8c6dc43f3592c229282"
|
||
|
on user_group_joining ("userId", "userGroupId");
|
||
|
|
||
|
|
||
|
create table user_group_invite
|
||
|
(
|
||
|
id varchar(32) not null
|
||
|
constraint "PK_3893884af0d3a5f4d01e7921a97"
|
||
|
primary key,
|
||
|
"createdAt" timestamp with time zone not null,
|
||
|
"userId" varchar(32) not null
|
||
|
constraint "FK_1039988afa3bf991185b277fe03"
|
||
|
references "user"
|
||
|
on delete cascade,
|
||
|
"userGroupId" varchar(32) not null
|
||
|
constraint "FK_e10924607d058004304611a436a"
|
||
|
references user_group
|
||
|
on delete cascade
|
||
|
);
|
||
|
|
||
|
alter table user_group_invite
|
||
|
owner to "example-calckey-user";
|
||
|
|
||
|
create index "IDX_1039988afa3bf991185b277fe0"
|
||
|
on user_group_invite ("userId");
|
||
|
|
||
|
create index "IDX_e10924607d058004304611a436"
|
||
|
on user_group_invite ("userGroupId");
|
||
|
|
||
|
create unique index "IDX_78787741f9010886796f2320a4"
|
||
|
on user_group_invite ("userId", "userGroupId");
|
||
|
|
||
|
ALTER TABLE "user_profile" ALTER COLUMN "emailNotificationTypes"
|
||
|
SET DEFAULT '["follow", "receiveFollowRequest", "groupInvited"]'::jsonb;
|
||
|
|
||
|
alter table antenna add "userGroupJoiningId" varchar(32)
|
||
|
constraint "FK_ccbf5a8c0be4511133dcc50ddeb"
|
||
|
references user_group_joining
|
||
|
on delete cascade;
|
||
|
|
||
|
alter table notification add column "userGroupInvitationId" varchar(32)
|
||
|
constraint "FK_8fe87814e978053a53b1beb7e98"
|
||
|
references user_group_invitation
|
||
|
on delete cascade;
|
||
|
|
||
|
ALTER TYPE "antenna_src_enum" RENAME TO "antenna_src_enum_old";
|
||
|
CREATE TYPE "antenna_src_enum" AS ENUM('home', 'all', 'users', 'list', 'group', 'instances');
|
||
|
ALTER TABLE "antenna" ALTER COLUMN "src" TYPE "antenna_src_enum" USING "src"::text::antenna_src_enum;
|
||
|
DROP TYPE "antenna_src_enum_old";
|
||
|
"#,
|
||
|
)
|
||
|
.await?;
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
}
|