use std::env::var;
use shardline_server::{
DatabaseMigrationCommand, DatabaseMigrationError, DatabaseMigrationOptions,
DatabaseMigrationReport, run_database_migration,
};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum DbRuntimeError {
#[error(
"no Postgres metadata URL configured; set SHARDLINE_INDEX_POSTGRES_URL or pass --database-url"
)]
MissingDatabaseUrl,
#[error(transparent)]
Migration(#[from] DatabaseMigrationError),
}
pub async fn run_db_migration(
database_url_override: Option<&str>,
command: DatabaseMigrationCommand,
) -> Result<DatabaseMigrationReport, DbRuntimeError> {
let database_url = if let Some(database_url) = database_url_override {
database_url.to_owned()
} else if let Ok(database_url) = var("SHARDLINE_INDEX_POSTGRES_URL") {
database_url
} else {
return Err(DbRuntimeError::MissingDatabaseUrl);
};
let options = DatabaseMigrationOptions::new(database_url, command);
Ok(run_database_migration(&options).await?)
}