diff --git a/src/backend/src/config.rs b/src/backend/src/config.rs new file mode 100644 index 0000000..c8375b9 --- /dev/null +++ b/src/backend/src/config.rs @@ -0,0 +1,4 @@ +#[derive(Debug)] +pub struct AppCfg { + pub db_path: String, +} diff --git a/src/backend/src/infra/db/mod.rs b/src/backend/src/infra/db/mod.rs index 5505eef..7f72eba 100644 --- a/src/backend/src/infra/db/mod.rs +++ b/src/backend/src/infra/db/mod.rs @@ -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 { } pub async fn migrate(pool: &PgPool) -> Result<()> { - sqlx::migrate!().run(&pool).await?; + sqlx::migrate!().run(pool).await?; Ok(()) } diff --git a/src/backend/src/infra/db/user.rs b/src/backend/src/infra/db/user.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/backend/src/lib.rs b/src/backend/src/lib.rs index ed7e20b..fffec09 100644 --- a/src/backend/src/lib.rs +++ b/src/backend/src/lib.rs @@ -1,4 +1,5 @@ pub mod auth; +pub mod config; pub mod core; pub mod domain; pub mod infra; diff --git a/src/backend/src/main.rs b/src/backend/src/main.rs index 893db5c..c3018de 100644 --- a/src/backend/src/main.rs +++ b/src/backend/src/main.rs @@ -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; diff --git a/src/backend/src/state.rs b/src/backend/src/state.rs index 53a2e7b..dc30c14 100644 --- a/src/backend/src/state.rs +++ b/src/backend/src/state.rs @@ -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, + 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 } } }