Simple AppCfg setup to hold PgPool in AppState

This commit is contained in:
2025-11-30 21:20:00 +01:00
parent 5c3c7a0e02
commit 7aa13825fc
6 changed files with 41 additions and 10 deletions

View File

@@ -0,0 +1,4 @@
#[derive(Debug)]
pub struct AppCfg {
pub db_path: String,
}

View File

@@ -1,3 +1,5 @@
pub mod user;
use std::time::Duration;
use sqlx::{PgPool, postgres::PgPoolOptions};
@@ -15,6 +17,6 @@ pub async fn connect(database_url: &str) -> Result<PgPool> {
}
pub async fn migrate(pool: &PgPool) -> Result<()> {
sqlx::migrate!().run(&pool).await?;
sqlx::migrate!().run(pool).await?;
Ok(())
}

View File

View File

@@ -1,4 +1,5 @@
pub mod auth;
pub mod config;
pub mod core;
pub mod domain;
pub mod infra;

View File

@@ -1,7 +1,7 @@
use std::sync::Arc;
use anyhow::{Ok, Result};
use rustymine_daemon::{router, state::AppState};
use rustymine_daemon::{config::AppCfg, router, state::AppState};
use tracing::{Level, debug, error, info, warn};
pub const APP_NAME: &str = env!("CARGO_PKG_NAME");
@@ -38,7 +38,12 @@ async fn main() -> Result<()> {
tracing::subscriber::set_global_default(subscriber)?;
let state = Arc::new(AppState::new());
let db_path: String = "postgres://rustymine:minecraft@localhost:5432/rustymine_dev".to_string();
let config = AppCfg {
db_path: db_path.clone(),
};
let state = Arc::new(AppState::new(&config).await);
let app_result = router::init_router(state.clone()).await;

View File

@@ -1,15 +1,34 @@
use std::collections::HashMap;
use std::process::exit;
use crate::domain::user::InternalNewUser;
use crate::prelude::*;
use sqlx::PgPool;
use crate::{config::AppCfg, domain::user::InternalNewUser, infra::db};
pub struct AppState {
pub users: HashMap<String, InternalNewUser>,
pub db_pool: PgPool,
}
impl AppState {
pub fn new() -> Self {
Self {
users: HashMap::new(),
}
pub async fn new(config: &AppCfg) -> Self {
debug!("Initiating new AppState");
let db_pool = db::connect(&config.db_path)
.await
.map_err(|e| {
error!("Failed to connect to database: {e}");
exit(20);
})
.unwrap();
db::migrate(&db_pool)
.await
.map_err(|e| {
error!("Failed to migrade database: {e}");
exit(22);
})
.unwrap();
info!("DB connect and migrate sucessful");
Self { db_pool: db_pool }
}
}