persistence
All checks were successful
/ upload (release) Successful in 2m9s

This commit is contained in:
pavel 2026-02-07 19:36:34 +01:00
commit 55de4a1fc0
11 changed files with 2105 additions and 141 deletions

13
migration/Cargo.toml Normal file
View file

@ -0,0 +1,13 @@
[package]
name = "migration"
version = "0.1.0"
edition = "2024"
[lib]
name = "migration"
path = "src/lib.rs"
[dependencies]
async-trait = "0.1"
sea-orm-migration = { version = "1.1.0", features = ["runtime-tokio-rustls", "sqlx-postgres"] }
tokio = { version = "1", features = ["full"] }

12
migration/src/lib.rs Normal file
View file

@ -0,0 +1,12 @@
pub use sea_orm_migration::prelude::*;
mod m20220101_000001_create_table;
pub struct Migrator;
#[async_trait::async_trait]
impl MigratorTrait for Migrator {
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
vec![Box::new(m20220101_000001_create_table::Migration)]
}
}

View file

@ -0,0 +1,98 @@
use sea_orm_migration::prelude::*;
#[derive(Iden)]
enum Users {
Table,
Id,
Username,
CreatedAt,
}
#[derive(Iden)]
enum Messages {
Table,
Id,
FromUser,
ToUser,
Content,
CreatedAt,
}
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.create_table(
Table::create()
.table(Users::Table)
.if_not_exists()
.col(
ColumnDef::new(Users::Id)
.integer()
.not_null()
.auto_increment()
.primary_key(),
)
.col(
ColumnDef::new(Users::Username)
.string()
.not_null()
.unique_key(),
)
.col(
ColumnDef::new(Users::CreatedAt)
.date_time()
.not_null()
.extra("DEFAULT CURRENT_TIMESTAMP".to_string()),
)
.to_owned(),
)
.await?;
manager
.create_table(
Table::create()
.table(Messages::Table)
.if_not_exists()
.col(ColumnDef::new(Messages::Id).uuid().not_null().primary_key())
.col(ColumnDef::new(Messages::FromUser).string().not_null())
.col(ColumnDef::new(Messages::ToUser).string().not_null())
.col(ColumnDef::new(Messages::Content).text().not_null())
.col(
ColumnDef::new(Messages::CreatedAt)
.date_time()
.not_null()
.extra("DEFAULT CURRENT_TIMESTAMP".to_string()),
)
.foreign_key(
ForeignKey::create()
.name("fk-messages-from_user")
.from(Messages::Table, Messages::FromUser)
.to(Users::Table, Users::Username),
)
.foreign_key(
ForeignKey::create()
.name("fk-messages-to_user")
.from(Messages::Table, Messages::ToUser)
.to(Users::Table, Users::Username),
)
.to_owned(),
)
.await?;
Ok(())
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager
.drop_table(Table::drop().table(Messages::Table).to_owned())
.await?;
manager
.drop_table(Table::drop().table(Users::Table).to_owned())
.await?;
Ok(())
}
}

6
migration/src/main.rs Normal file
View file

@ -0,0 +1,6 @@
use sea_orm_migration::prelude::*;
#[tokio::main]
async fn main() {
cli::run_cli(migration::Migrator).await;
}