koprogo_api/infrastructure/database/
pool.rs1use sqlx::postgres::PgPoolOptions;
15use sqlx::{Pool, Postgres};
16use std::env;
17use std::time::Duration;
18
19pub type DbPool = Pool<Postgres>;
20
21pub async fn create_pool(database_url: &str) -> Result<DbPool, sqlx::Error> {
22 let max_connections = env::var("DB_POOL_MAX_CONNECTIONS")
23 .unwrap_or_else(|_| "10".to_string())
24 .parse::<u32>()
25 .unwrap_or(10);
26
27 let min_connections = env::var("DB_POOL_MIN_CONNECTIONS")
28 .unwrap_or_else(|_| "2".to_string())
29 .parse::<u32>()
30 .unwrap_or(2);
31
32 let acquire_timeout = env::var("DB_POOL_ACQUIRE_TIMEOUT")
33 .unwrap_or_else(|_| "30".to_string())
34 .parse::<u64>()
35 .unwrap_or(30);
36
37 log::info!(
38 "Creating database pool: max_connections={}, min_connections={}, acquire_timeout={}s",
39 max_connections,
40 min_connections,
41 acquire_timeout
42 );
43
44 PgPoolOptions::new()
45 .max_connections(max_connections)
46 .min_connections(min_connections)
47 .acquire_timeout(Duration::from_secs(acquire_timeout))
48 .idle_timeout(Duration::from_secs(600)) .max_lifetime(Duration::from_secs(1800)) .connect(database_url)
51 .await
52}