From 5648fed8df952d7c52ae0dd20e2c238eee468f81 Mon Sep 17 00:00:00 2001 From: Daniel Hader Date: Sun, 7 Jun 2026 16:23:47 -0500 Subject: problem and admin initialization is only done if needed --- src/main.rs | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index b446402..0fe906a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,19 +27,27 @@ struct AppState { async fn main() { let database = Database::new_in_memory().unwrap(); + + // initialize tables database.initialize().unwrap(); - // TODO: generically load environment variables, this is tedious + // initialize problems if none exist yet + if let Ok(problems) = database.fetch_problems() { + if problems.len() == 0 { database.initialize_problems().unwrap(); } + } + let Ok(secret) = env::var("JWT_SECRET") else { eprintln!("missing environment variable JWT_SECRET"); return; }; - let Ok(register_code) = env::var("REGISTER_CODE") else { eprintln!("missing environment variable REGISTER_CODE"); return; }; - + let Ok(listen_address) = env::var("LISTEN_ADDRESS") else { + eprintln!("missing environment variable LISTEN_ADDRESS"); + return; + }; let Ok(admin_email) = env::var("ADMIN_EMAIL") else { eprintln!("missing environment variable ADMIN_EMAIL"); return; @@ -52,11 +60,14 @@ async fn main() { eprintln!("missing environment variable ADMIN_PASSWORD"); return; }; - - let Ok(()) = register_admin(&database, &admin_email, &admin_username, &admin_password) else { - eprintln!("failed to register admin user"); - return; - }; + + if let Ok(None) = database.fetch_user_by_email(&admin_email) { + // register admin if admin user does not exist yet + let Ok(()) = register_admin(&database, &admin_email, &admin_username, &admin_password) else { + eprintln!("failed to register admin user"); + return; + }; + } let state = AppState { secret: secret, @@ -80,7 +91,7 @@ async fn main() { .nest_service("/static", static_files) .with_state(state); - let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + let listener = tokio::net::TcpListener::bind(listen_address).await.unwrap(); axum::serve(listener, app).await.unwrap(); } -- cgit v1.2.3