71 lines
2.1 KiB
Rust
71 lines
2.1 KiB
Rust
use sea_orm_migration::{prelude::*, sea_orm::ConnectionTrait, sea_query::Expr};
|
|
|
|
#[derive(DeriveMigrationName)]
|
|
pub struct Migration;
|
|
|
|
#[derive(DeriveIden)]
|
|
enum SitePages {
|
|
Table,
|
|
Id,
|
|
Slug,
|
|
Title,
|
|
Content,
|
|
CreatedAt,
|
|
UpdatedAt,
|
|
}
|
|
|
|
#[async_trait::async_trait]
|
|
impl MigrationTrait for Migration {
|
|
async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
|
m.create_table(
|
|
Table::create()
|
|
.table(SitePages::Table)
|
|
.if_not_exists()
|
|
.col(
|
|
ColumnDef::new(SitePages::Id)
|
|
.uuid()
|
|
.not_null()
|
|
.primary_key(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(SitePages::Slug)
|
|
.string_len(100)
|
|
.not_null()
|
|
.unique_key(),
|
|
)
|
|
.col(ColumnDef::new(SitePages::Title).string_len(500).not_null())
|
|
.col(ColumnDef::new(SitePages::Content).text().not_null())
|
|
.col(
|
|
ColumnDef::new(SitePages::CreatedAt)
|
|
.timestamp_with_time_zone()
|
|
.not_null()
|
|
.default(Expr::current_timestamp()),
|
|
)
|
|
.col(
|
|
ColumnDef::new(SitePages::UpdatedAt)
|
|
.timestamp_with_time_zone()
|
|
.not_null()
|
|
.default(Expr::current_timestamp()),
|
|
)
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
|
|
m.get_connection()
|
|
.execute_unprepared(
|
|
"INSERT INTO site_pages (id, slug, title, content, created_at, updated_at) \
|
|
VALUES (gen_random_uuid(), 'about', 'About', '', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) \
|
|
ON CONFLICT (slug) DO NOTHING",
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
|
m.drop_table(Table::drop().table(SitePages::Table).to_owned())
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
}
|