58 lines
1.7 KiB
Rust
58 lines
1.7 KiB
Rust
pub use sea_orm::Iterable;
|
|
pub use sea_orm_migration::prelude::*;
|
|
use sea_orm_migration::sea_orm::{DbBackend, Statement};
|
|
|
|
mod m20220101_000001_create_table;
|
|
mod m20230726_124452_images;
|
|
mod m20230726_135630_parking_spaces;
|
|
|
|
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),
|
|
Box::new(m20230726_124452_images::Migration),
|
|
Box::new(m20230726_135630_parking_spaces::Migration),
|
|
]
|
|
}
|
|
}
|
|
|
|
pub async fn drop_enum<'m, Enum>(m: &SchemaManager<'m>) -> Result<(), DbErr>
|
|
where
|
|
Enum: Iterable + Iden + IntoIden,
|
|
{
|
|
let db_postgres = DbBackend::Postgres;
|
|
let name = Enum::iter().next().unwrap().to_string();
|
|
let s = format!("DROP TYPE {name};");
|
|
let stmt = Statement::from_string(db_postgres, s);
|
|
m.get_connection().execute(stmt).await?;
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn create_enum<'m, Enum>(m: &SchemaManager<'m>) -> Result<(), DbErr>
|
|
where
|
|
Enum: Iterable + Iden + IntoIden,
|
|
{
|
|
let db_postgres = DbBackend::Postgres;
|
|
let s = {
|
|
let name = Enum::iter().next().unwrap().to_string();
|
|
let mut s = Enum::iter().skip(1).enumerate().fold(
|
|
format!("CREATE TYPE {name} AS ENUM ("),
|
|
|mut s, (idx, variant)| {
|
|
if idx != 0 {
|
|
s.push(',');
|
|
}
|
|
format!("{s} '{}'", variant.into_iden().quoted('\''))
|
|
},
|
|
);
|
|
s.push_str(" );");
|
|
eprintln!("{s:?}");
|
|
s
|
|
};
|
|
let stmt = Statement::from_string(db_postgres, s);
|
|
m.get_connection().execute(stmt).await?;
|
|
Ok(())
|
|
}
|