app

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

commit 58525728c5cf184076d83947c49e943e8dabf25e
parent 3e1f96aaed82966f4b6dd8dd6b26dbe26205b100
Author: triesap <triesap@radroots.dev>
Date:   Tue, 20 Jan 2026 23:17:10 +0000

app: share datastore handle in backends

- wrap web datastore in Rc for reuse

- update init bootstrap helpers to use Rc refs

- adjust init logging flush to use datastore handle

- import Rc for backends state management

Diffstat:
Mapp/src/app.rs | 2+-
Mapp/src/init.rs | 21++++++++++++++-------
2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/app/src/app.rs b/app/src/app.rs @@ -478,7 +478,7 @@ pub fn RadrootsApp() -> impl IntoView { match app_init_backends(config).await { Ok(value) => { let _ = app_log_buffer_flush_critical( - &value.datastore, + value.datastore.as_ref(), &value.config.datastore.key_maps, ) .await; diff --git a/app/src/init.rs b/app/src/init.rs @@ -1,6 +1,7 @@ #![forbid(unsafe_code)] use std::fmt; +use std::rc::Rc; use radroots_app_core::datastore::{ RadrootsClientDatastore, @@ -283,7 +284,7 @@ impl std::error::Error for RadrootsAppInitError {} pub struct RadrootsAppBackends { pub config: RadrootsAppConfig, - pub datastore: RadrootsClientWebDatastore, + pub datastore: Rc<RadrootsClientWebDatastore>, pub nostr_keystore: RadrootsClientWebKeystoreNostr, } @@ -385,17 +386,22 @@ pub async fn app_init_backends(config: RadrootsAppConfig) -> RadrootsAppInitResu "idb_bootstrap", Some(app_init_timing_context("elapsed", idb_ms)), ); - let datastore = RadrootsClientWebDatastore::new(Some(config.datastore.idb_config)); + let datastore = Rc::new(RadrootsClientWebDatastore::new(Some(config.datastore.idb_config))); datastore .init() .await .map_err(RadrootsAppInitError::Datastore)?; let _ = app_log_debug_emit("log.app.init.backends", "datastore_ready", None); - let has_config = app_datastore_has_settings(&datastore, &config.datastore.key_maps).await?; + let has_config = + app_datastore_has_settings(datastore.as_ref(), &config.datastore.key_maps).await?; if !has_config { let config_data = RadrootsAppSettings::default(); let _ = - app_datastore_write_settings(&datastore, &config.datastore.key_maps, &config_data) + app_datastore_write_settings( + datastore.as_ref(), + &config.datastore.key_maps, + &config_data, + ) .await?; } let _ = app_log_debug_emit("log.app.init.backends", "config_ready", None); @@ -432,9 +438,10 @@ pub async fn app_init_backends(config: RadrootsAppConfig) -> RadrootsAppInitResu Err(err) => return Err(RadrootsAppInitError::Datastore(err)), } let _ = app_log_debug_emit("log.app.init.backends", "nostr_key_synced", None); - let has_app_data = app_datastore_has_state(&datastore, &config.datastore.key_maps).await?; + let has_app_data = + app_datastore_has_state(datastore.as_ref(), &config.datastore.key_maps).await?; let mut app_data = if has_app_data { - app_datastore_read_state(&datastore, &config.datastore.key_maps).await? + app_datastore_read_state(datastore.as_ref(), &config.datastore.key_maps).await? } else { RadrootsAppState::default() }; @@ -442,7 +449,7 @@ pub async fn app_init_backends(config: RadrootsAppConfig) -> RadrootsAppInitResu if should_write { app_data.active_key = nostr_public_key; let _ = - app_datastore_write_state(&datastore, &config.datastore.key_maps, &app_data) + app_datastore_write_state(datastore.as_ref(), &config.datastore.key_maps, &app_data) .await?; } let _ = app_log_debug_emit("log.app.init.backends", "state_ready", None);