oswilno/crates/migration/src/lib.rs

58 lines
1.7 KiB
Rust
Raw Normal View History

2023-07-26 16:30:30 +02:00
pub use sea_orm::Iterable;
2023-07-26 11:16:29 +02:00
pub use sea_orm_migration::prelude::*;
2023-07-26 16:30:30 +02:00
use sea_orm_migration::sea_orm::{DbBackend, Statement};
2023-07-26 11:16:29 +02:00
mod m20220101_000001_create_table;
2023-07-26 16:30:30 +02:00
mod m20230726_124452_images;
mod m20230726_135630_parking_spaces;
2023-07-26 11:16:29 +02:00
pub struct Migrator;
#[async_trait::async_trait]
impl MigratorTrait for Migrator {
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
2023-07-26 16:30:30 +02:00
vec![
Box::new(m20220101_000001_create_table::Migration),
Box::new(m20230726_124452_images::Migration),
Box::new(m20230726_135630_parking_spaces::Migration),
]
2023-07-26 11:16:29 +02:00
}
}
2023-07-26 16:30:30 +02:00
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(())
}