Start caching the inventory data

This commit is contained in:
Jeremy Wall 2022-11-24 10:16:27 -05:00
parent 20db551090
commit db470ddc36

View File

@ -370,15 +370,25 @@ impl HttpStore {
) -> Result<(BTreeSet<IngredientKey>, BTreeMap<IngredientKey, String>), Error> { ) -> Result<(BTreeSet<IngredientKey>, BTreeMap<IngredientKey, String>), Error> {
let mut path = self.root.clone(); let mut path = self.root.clone();
path.push_str("/inventory"); path.push_str("/inventory");
let storage = js_lib::get_storage();
let resp = reqwasm::http::Request::get(&path).send().await?; let resp = reqwasm::http::Request::get(&path).send().await?;
if resp.status() != 200 { if resp.status() != 200 {
Err(format!("Status: {}", resp.status()).into()) let err = Err(format!("Status: {}", resp.status()).into());
Ok(match storage.get("inventory") {
Ok(Some(val)) => from_str(&val).expect("Failed to deserialize cached val"),
Ok(None) | Err(_) => return err,
})
} else { } else {
debug!("We got a valid response back"); debug!("We got a valid response back");
let (filtered_ingredients, modified_amts): ( let (filtered_ingredients, modified_amts): (
Vec<IngredientKey>, Vec<IngredientKey>,
Vec<(IngredientKey, String)>, Vec<(IngredientKey, String)>,
) = resp.json().await.map_err(|e| format!("{}", e))?; ) = resp.json().await.map_err(|e| format!("{}", e))?;
let _ = storage.set(
"inventory",
&to_string(&(&filtered_ingredients, &modified_amts))
.expect("Failed to serialize inventory data"),
);
Ok(( Ok((
filtered_ingredients.into_iter().collect(), filtered_ingredients.into_iter().collect(),
modified_amts.into_iter().collect(), modified_amts.into_iter().collect(),
@ -396,6 +406,8 @@ impl HttpStore {
let modified_amts: Vec<(IngredientKey, String)> = modified_amts.into_iter().collect(); let modified_amts: Vec<(IngredientKey, String)> = modified_amts.into_iter().collect();
let serialized_inventory = to_string(&(filtered_ingredients, modified_amts)) let serialized_inventory = to_string(&(filtered_ingredients, modified_amts))
.expect("Unable to encode plan as json"); .expect("Unable to encode plan as json");
let storage = js_lib::get_storage();
let _ = storage.set("inventory", &serialized_inventory);
path.push_str("/inventory"); path.push_str("/inventory");
let resp = reqwasm::http::Request::post(&path) let resp = reqwasm::http::Request::post(&path)
.body(&serialized_inventory) .body(&serialized_inventory)