diff --git a/crates/ascend/src/server.rs b/crates/ascend/src/server.rs index 3ea039f..ba6c49e 100644 --- a/crates/ascend/src/server.rs +++ b/crates/ascend/src/server.rs @@ -9,6 +9,7 @@ use state::PersistentState; use state::State; use std::collections::BTreeMap; use std::path::Path; +use std::path::PathBuf; use tower_http::services::ServeDir; use tracing::level_filters::LevelFilter; use type_toppings::ResultExt; @@ -36,7 +37,6 @@ pub mod cli { ImportMiniMoonboardProblems { file_path: PathBuf, }, - // TODO: idempotent state initialization to be used in systemd preStart hook } } @@ -156,10 +156,16 @@ fn file_service(path: impl AsRef) -> ServeDir { #[tracing::instrument] async fn load_state() -> Result { tracing::info!("Loading state"); - let state = State { - persistent: Persistent::::load(&Path::new(STATE_FILE)).await?, + + let p = PathBuf::from(STATE_FILE); + let persistent = if p.try_exists()? { + tracing::info!("No state found at {STATE_FILE}, creating default state"); + Persistent::::load(&p).await? + } else { + Persistent::::new(PersistentState::default(), p) }; - Ok(state) + + Ok(State { persistent }) } #[tracing::instrument] diff --git a/crates/ascend/src/server/persistence.rs b/crates/ascend/src/server/persistence.rs index deab2f4..eda5713 100644 --- a/crates/ascend/src/server/persistence.rs +++ b/crates/ascend/src/server/persistence.rs @@ -1,4 +1,3 @@ -use camino::Utf8PathBuf; use serde::Serialize; use serde::de::DeserializeOwned; use std::path::Path;