From ba325b1581e82c1f7d91ce59ac6827b11b8146a6 Mon Sep 17 00:00:00 2001 From: J H Date: Tue, 12 Mar 2024 11:58:13 -0600 Subject: [PATCH] feat: Move the store to private. --- core/startos/src/db/mod.rs | 29 ++++++++++++------- core/startos/src/db/model.rs | 4 ++- core/startos/src/properties.rs | 11 +++---- core/startos/src/service/mod.rs | 1 - .../src/service/service_effect_handler.rs | 17 ++++------- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/core/startos/src/db/mod.rs b/core/startos/src/db/mod.rs index bfb8435e2..5ef140dcb 100644 --- a/core/startos/src/db/mod.rs +++ b/core/startos/src/db/mod.rs @@ -186,18 +186,30 @@ pub enum RevisionsRes { #[serde(rename_all = "kebab-case")] #[command(rename_all = "kebab-case")] pub struct CliDumpParams { + #[arg(long = "include-private", short = 'p')] + #[serde(default)] + include_private: bool, path: Option, } #[instrument(skip_all)] async fn cli_dump( ctx: CliContext, - CliDumpParams { path }: CliDumpParams, + CliDumpParams { + path, + include_private, + }: CliDumpParams, ) -> Result { let dump = if let Some(path) = path { PatchDb::open(path).await?.dump(&ROOT).await } else { - from_value::(ctx.call_remote("db.dump", imbl_value::json!({})).await?)? + from_value::( + ctx.call_remote( + "db.dump", + imbl_value::json!({ "include-private":include_private }), + ) + .await?, + )? }; Ok(dump) @@ -216,14 +228,11 @@ pub async fn dump( ctx: RpcContext, DumpParams { include_private }: DumpParams, ) -> Result { - Ok(ctx - .db - .dump(&if include_private { - ROOT - } else { - PUBLIC.borrowed() - }) - .await) + Ok(if include_private { + ctx.db.dump(&ROOT).await + } else { + ctx.db.dump(&PUBLIC).await + }) } #[instrument(skip_all)] diff --git a/core/startos/src/db/model.rs b/core/startos/src/db/model.rs index 92707060a..f166ed3e0 100644 --- a/core/startos/src/db/model.rs +++ b/core/startos/src/db/model.rs @@ -120,6 +120,7 @@ impl Database { sessions: Sessions::new(), notifications: Notifications::new(), cifs: CifsTargets::new(), + package_stores: BTreeMap::new(), }, // TODO }) } @@ -149,6 +150,8 @@ pub struct Private { pub sessions: Sessions, pub notifications: Notifications, pub cifs: CifsTargets, + #[serde(default)] + pub package_stores: BTreeMap, } #[derive(Debug, Deserialize, Serialize, HasModel)] @@ -513,7 +516,6 @@ pub struct InstalledPackageInfo { pub current_dependencies: CurrentDependencies, pub interface_addresses: InterfaceAddressMap, pub hosts: HostInfo, - pub store: Value, pub store_exposed_ui: Vec, pub store_exposed_dependents: Vec, } diff --git a/core/startos/src/properties.rs b/core/startos/src/properties.rs index 9d3a67054..1a8315cc3 100644 --- a/core/startos/src/properties.rs +++ b/core/startos/src/properties.rs @@ -49,14 +49,11 @@ pub async fn properties( ) -> Result { let peeked = ctx.db.peek().await; let data = peeked - .as_public() - .as_package_data() + .as_private() + .as_package_stores() .as_idx(&id) - .or_not_found(&id)? - .as_installed() - .or_not_found(&id)? - .as_store() - .de()?; + .map(|x| x.de()) + .unwrap_or_else(|| Ok(json!({})))?; Ok(peeked .as_public() .as_package_data() diff --git a/core/startos/src/service/mod.rs b/core/startos/src/service/mod.rs index 1efb116d5..83f03fc4b 100644 --- a/core/startos/src/service/mod.rs +++ b/core/startos/src/service/mod.rs @@ -290,7 +290,6 @@ impl Service { manifest: manifest.clone(), last_backup: None, // TODO hosts: Default::default(), // TODO - store: Value::Null, // TODO store_exposed_dependents: Default::default(), // TODO store_exposed_ui: Default::default(), // TODO }, diff --git a/core/startos/src/service/service_effect_handler.rs b/core/startos/src/service/service_effect_handler.rs index 48e27134b..08de40b8f 100644 --- a/core/startos/src/service/service_effect_handler.rs +++ b/core/startos/src/service/service_effect_handler.rs @@ -300,13 +300,10 @@ async fn get_store( let peeked = context.ctx.db.peek().await; let package_id = package_id.unwrap_or(context.id.clone()); let value = peeked - .as_public() - .as_package_data() + .as_private() + .as_package_stores() .as_idx(&package_id) .or_not_found(&package_id)? - .as_installed() - .or_not_found(&package_id)? - .as_store() .de()?; Ok(path @@ -332,13 +329,9 @@ async fn set_store( .db .mutate(|db| { let model = db - .as_public_mut() - .as_package_data_mut() - .as_idx_mut(&package_id) - .or_not_found(&package_id)? - .as_installed_mut() - .or_not_found(&package_id)? - .as_store_mut(); + .as_private_mut() + .as_package_stores_mut() + .upsert(&package_id, || Box::new(json!({})))?; let mut model_value = model.de()?; if model_value.is_null() { model_value = json!({});