use crate::env::EnvironmentKind;
use crate::AppEnvironment;
use sea_orm::{ConnectOptions, Database, DatabaseConnection, DbErr};
use tracing::log;
pub struct DatabaseFactory;
impl DatabaseFactory {
pub async fn connect(env: &AppEnvironment) -> Result<DatabaseConnection, DbErr> {
let mut con = &mut ConnectOptions::new(&env.pg_url);
con = con.max_connections(30u32);
con = con.min_connections(10u32);
con = con.max_lifetime(std::time::Duration::from_secs(300));
con = con.sqlx_logging_level(match env.kind {
EnvironmentKind::Development => log::LevelFilter::Trace,
EnvironmentKind::Debug => log::LevelFilter::Debug,
EnvironmentKind::Staging => log::LevelFilter::Info,
EnvironmentKind::Production => log::LevelFilter::Error,
});
con = con.sqlx_logging(env.log_sql);
con = con.record_stmt_in_spans(env.log_sql);
Database::connect(con.clone()).await
}
}