pub mod prelude {
pub use async_trait::async_trait;
pub use sea_orm_migration::prelude::*;
}
pub use sea_orm::DbErr;
pub use sea_orm_migration::MigrationTrait;
pub use sea_orm_migration::MigratorTrait;
pub use sea_orm_migration::SchemaManager;
pub use sea_orm_migration::prelude::{DeriveIden, DeriveMigrationName};
#[macro_export]
macro_rules! migrations {
($($module:ident ),* $(,)?) => {
pub struct Migrator;
#[$crate::async_trait::async_trait]
impl $crate::sea_orm_migration::MigratorTrait for Migrator {
fn migrations() -> Vec<Box<dyn $crate::sea_orm_migration::MigrationTrait>> {
vec![
$(Box::new($module::Migration), )*
]
}
}
}
}
pub async fn run_pending<M: MigratorTrait>(
conn: &sea_orm::DatabaseConnection,
) -> Result<(), DbErr> {
tracing::info!("Running pending database migrations...");
M::up(conn, None).await?;
tracing::info!("All migrations applied successfully");
Ok(())
}
pub async fn rollback<M: MigratorTrait>(
conn: &sea_orm::DatabaseConnection,
steps: Option<u32>,
) -> Result<(), DbErr> {
let steps = steps.unwrap_or(1);
tracing::info!(steps, "Rolling back migrations...");
M::down(conn, Some(steps)).await?;
tracing::info!("Rollback complete");
Ok(())
}
pub async fn status<M: MigratorTrait>(conn: &sea_orm::DatabaseConnection) -> Result<(), DbErr> {
M::status(conn).await
}