shared_framework/data/
connectors.rs1use crate::env::EnvironmentKind;
7use crate::AppEnvironment;
8use sea_orm::{ConnectOptions, Database, DatabaseConnection, DbErr};
9use tracing::log;
10
11pub struct DatabaseFactory;
13
14impl DatabaseFactory {
15 pub async fn connect(env: &AppEnvironment) -> Result<DatabaseConnection, DbErr> {
22 let mut con = &mut ConnectOptions::new(&env.pg_url);
23
24 con = con.max_connections(30u32);
25 con = con.min_connections(10u32);
26 con = con.max_lifetime(std::time::Duration::from_secs(300));
27 con = con.sqlx_logging_level(match env.kind {
28 EnvironmentKind::Development => log::LevelFilter::Trace,
29 EnvironmentKind::Debug => log::LevelFilter::Debug,
30 EnvironmentKind::Staging => log::LevelFilter::Info,
31 EnvironmentKind::Production => log::LevelFilter::Error,
32 });
33 con = con.sqlx_logging(env.log_sql);
34 con = con.record_stmt_in_spans(env.log_sql);
35
36 Database::connect(con.clone()).await
37 }
38}