koprogo_api/infrastructure/database/
pool.rs1use sqlx::postgres::PgPoolOptions;
2use sqlx::{Pool, Postgres};
3use std::env;
4use std::time::Duration;
5
6pub type DbPool = Pool<Postgres>;
7
8pub async fn create_pool(database_url: &str) -> Result<DbPool, sqlx::Error> {
9 let max_connections = env::var("DB_POOL_MAX_CONNECTIONS")
10 .unwrap_or_else(|_| "10".to_string())
11 .parse::<u32>()
12 .unwrap_or(10);
13
14 let min_connections = env::var("DB_POOL_MIN_CONNECTIONS")
15 .unwrap_or_else(|_| "2".to_string())
16 .parse::<u32>()
17 .unwrap_or(2);
18
19 let acquire_timeout = env::var("DB_POOL_ACQUIRE_TIMEOUT")
20 .unwrap_or_else(|_| "30".to_string())
21 .parse::<u64>()
22 .unwrap_or(30);
23
24 log::info!(
25 "Creating database pool: max_connections={}, min_connections={}, acquire_timeout={}s",
26 max_connections,
27 min_connections,
28 acquire_timeout
29 );
30
31 PgPoolOptions::new()
32 .max_connections(max_connections)
33 .min_connections(min_connections)
34 .acquire_timeout(Duration::from_secs(acquire_timeout))
35 .idle_timeout(Duration::from_secs(600)) .max_lifetime(Duration::from_secs(1800)) .connect(database_url)
38 .await
39}