app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit 227a975ef853fd0dfc1250dea943632bbe79b824
parent 59b792f10147bf9bf41bf4d24da503e2935f76df
Author: triesap <triesap@radroots.dev>
Date:   Wed, 21 Jan 2026 16:12:42 +0000

app: add app data initialization predicate

- add helper to check required app data fields

- export initialization helper for gating flow

- add unit test for initialization requirements

- keep app data schema unchanged

Diffstat:
Mapp/src/data.rs | 17++++++++++++++++-
Mapp/src/lib.rs | 2+-
2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/app/src/data.rs b/app/src/data.rs @@ -55,9 +55,13 @@ impl Default for RadrootsAppState { } } +pub fn app_state_is_initialized(state: &RadrootsAppState) -> bool { + !state.active_key.is_empty() && !state.eula_date.is_empty() +} + #[cfg(test)] mod tests { - use super::{RadrootsAppState, RadrootsAppSettings, RadrootsAppRole}; + use super::{app_state_is_initialized, RadrootsAppRole, RadrootsAppSettings, RadrootsAppState}; #[test] fn role_defaults_to_public() { @@ -83,4 +87,15 @@ mod tests { assert!(data.nip05_key.is_none()); assert!(data.notifications_permission.is_none()); } + + #[test] + fn state_initialized_requires_key_and_eula() { + let data = RadrootsAppState::default(); + assert!(!app_state_is_initialized(&data)); + let mut data = RadrootsAppState::default(); + data.active_key = "pub".to_string(); + assert!(!app_state_is_initialized(&data)); + data.eula_date = "2025-01-01T00:00:00Z".to_string(); + assert!(app_state_is_initialized(&data)); + } } diff --git a/app/src/lib.rs b/app/src/lib.rs @@ -27,7 +27,7 @@ pub use bootstrap::{ app_datastore_write_settings, }; pub use context::{app_context, RadrootsAppContext}; -pub use data::{RadrootsAppState, RadrootsAppSettings, RadrootsAppRole}; +pub use data::{app_state_is_initialized, RadrootsAppRole, RadrootsAppSettings, RadrootsAppState}; pub use health::{ app_health_check_all, app_health_check_all_logged,