119 lines
5.0 KiB
Rust
119 lines
5.0 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#"
|
||
|
ALTER TABLE "user_profile" DROP COLUMN "pinnedPageId";
|
||
|
|
||
|
DROP TABLE "page_like";
|
||
|
DROP TABLE "page";
|
||
|
"#,
|
||
|
)
|
||
|
.await?;
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||
|
let db = manager.get_connection();
|
||
|
|
||
|
db.execute_unprepared(
|
||
|
r#"
|
||
|
create table page
|
||
|
(
|
||
|
id varchar(32) not null
|
||
|
constraint "PK_742f4117e065c5b6ad21b37ba1f"
|
||
|
primary key,
|
||
|
"createdAt" timestamp with time zone not null,
|
||
|
"updatedAt" timestamp with time zone not null,
|
||
|
title varchar(256) not null,
|
||
|
name varchar(256) not null,
|
||
|
summary varchar(256),
|
||
|
"alignCenter" boolean not null,
|
||
|
font varchar(32) not null,
|
||
|
"userId" varchar(32) not null
|
||
|
constraint "FK_ae1d917992dd0c9d9bbdad06c4a"
|
||
|
references "user"
|
||
|
on delete cascade,
|
||
|
"eyeCatchingImageId" varchar(32)
|
||
|
constraint "FK_a9ca79ad939bf06066b81c9d3aa"
|
||
|
references drive_file
|
||
|
on delete cascade,
|
||
|
content jsonb default '[]'::jsonb not null,
|
||
|
variables jsonb default '[]'::jsonb not null,
|
||
|
visibility page_visibility_enum not null,
|
||
|
"visibleUserIds" varchar(32)[] default '{}'::character varying[] not null,
|
||
|
"likedCount" integer default 0 not null,
|
||
|
"hideTitleWhenPinned" boolean default false not null,
|
||
|
script varchar(16384) default ''::character varying not null,
|
||
|
"isPublic" boolean default true not null
|
||
|
);
|
||
|
|
||
|
comment on column page."createdAt" is 'The created date of the Page.';
|
||
|
|
||
|
comment on column page."updatedAt" is 'The updated date of the Page.';
|
||
|
|
||
|
comment on column page."userId" is 'The ID of author.';
|
||
|
|
||
|
create index "IDX_fbb4297c927a9b85e9cefa2eb1"
|
||
|
on page ("createdAt");
|
||
|
|
||
|
create index "IDX_af639b066dfbca78b01a920f8a"
|
||
|
on page ("updatedAt");
|
||
|
|
||
|
create index "IDX_b82c19c08afb292de4600d99e4"
|
||
|
on page (name);
|
||
|
|
||
|
create index "IDX_ae1d917992dd0c9d9bbdad06c4"
|
||
|
on page ("userId");
|
||
|
|
||
|
create index "IDX_90148bbc2bf0854428786bfc15"
|
||
|
on page ("visibleUserIds");
|
||
|
|
||
|
create unique index "IDX_2133ef8317e4bdb839c0dcbf13"
|
||
|
on page ("userId", name);
|
||
|
|
||
|
create table page_like
|
||
|
(
|
||
|
id varchar(32) not null
|
||
|
constraint "PK_813f034843af992d3ae0f43c64c"
|
||
|
primary key,
|
||
|
"createdAt" timestamp with time zone not null,
|
||
|
"userId" varchar(32) not null
|
||
|
constraint "FK_0e61efab7f88dbb79c9166dbb48"
|
||
|
references "user"
|
||
|
on delete cascade,
|
||
|
"pageId" varchar(32) not null
|
||
|
constraint "FK_cf8782626dced3176038176a847"
|
||
|
references page
|
||
|
on delete cascade
|
||
|
);
|
||
|
|
||
|
create index "IDX_0e61efab7f88dbb79c9166dbb4"
|
||
|
on page_like ("userId");
|
||
|
|
||
|
create unique index "IDX_4ce6fb9c70529b4c8ac46c9bfa"
|
||
|
on page_like ("userId", "pageId");
|
||
|
|
||
|
alter table user_profile
|
||
|
add "pinnedPageId" varchar(32)
|
||
|
constraint "UQ_6dc44f1ceb65b1e72bacef2ca27"
|
||
|
unique
|
||
|
constraint "FK_6dc44f1ceb65b1e72bacef2ca27"
|
||
|
references page
|
||
|
on delete set null;
|
||
|
"#,
|
||
|
)
|
||
|
.await?;
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
}
|