eversal_lib/database/
mod.rs1use std::{sync::OnceLock, time::Duration};
2
3use sqlx::{postgres::PgPoolOptions, Pool, Postgres};
4
5mod inv_category;
6pub use inv_category::{CategoryDb, CategoryFilter};
7mod inv_group;
8pub use inv_group::{GroupDb, GroupFilter};
9mod inv_market_group;
10pub use inv_market_group::{MarketGroupDb, MarketGroupFilter};
11mod inv_type;
12pub use inv_type::{TypeDb, TypeFilter};
13mod map_constellation;
14pub use map_constellation::{ConstellationDb, ConstellationFilter};
15mod map_region;
16pub use map_region::{RegionDb, RegionFilter};
17mod map_system_jump;
18pub use map_system_jump::{SystemJumpDb, SystemJumpFilter};
19mod map_system;
20pub use map_system::{SystemDb, SystemFilter};
21mod npc_corporation;
22pub use npc_corporation::{CorporationDb, CorporationFilter};
23mod npc_faction;
24pub use npc_faction::{FactionDb, FactionFilter};
25mod npc_station;
26pub use npc_station::{StationDb, StationFilter};
27
28static POOL: OnceLock<Pool<Postgres>> = OnceLock::new();
29
30const EVERSAL: &str = "eversal";
31
32pub async fn initialize() -> Result<(), sqlx::Error> {
33 log::info!("Setting up database pool...");
34 let db_user = std::env::var("DATABASE_USER").unwrap_or(EVERSAL.to_string());
35 let db_password = std::env::var("DATABASE_PASSWORD").expect("DATABASE_PASSWORD must be set");
36 let db_host: String = std::env::var("DATABASE_HOST").expect("DATABASE_HOST must be set");
37 let db_port = std::env::var("DATABASE_PORT").unwrap_or("5432".to_string());
38 let db_name = std::env::var("DATABASE_NAME").unwrap_or(EVERSAL.to_string());
39
40 let pool = PgPoolOptions::new()
41 .max_connections(5)
42 .acquire_timeout(Duration::from_secs(30))
43 .connect(&format!(
44 "postgres://{}:{}@{}:{}/{}",
45 db_user, db_password, db_host, db_port, db_name
46 ))
47 .await?;
48 match POOL.set(pool) {
49 Ok(_) => {}
50 Err(_) => {
51 log::warn!("Database pool already initialized");
52 }
53 }
54
55 log::info!("Database pool initialized");
56 Ok(())
57}
58
59pub fn pool() -> &'static Pool<Postgres> {
60 POOL.get().unwrap()
61}