use crate::db::DbSettings;
use log::info;
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
use sqlx::AnyPool;
use std::sync::OnceLock;
pub static DB_CONN: OnceLock<DatabaseConnection> = OnceLock::new();
pub async fn init_db(db_settings: DbSettings) {
info!("init database...");
let mut opt = ConnectOptions::new(db_settings.url);
opt.sqlx_logging_level(log::LevelFilter::Trace);
let connection = Database::connect(opt)
.await
.expect("Failed to connect to the database");
DB_CONN
.set(connection.clone())
.expect("Unable to set database connector");
}
pub async fn migrate(db_settings: DbSettings) -> Result<(), sqlx::Error> {
info!("migrating database...");
let db_url = db_settings.url;
let pool = AnyPool::connect(db_url.as_str()).await?;
Ok(sqlx::migrate!().run(&pool).await?)
}