From 6f9048e5b1c2a26f9957569840ec33f35e02414a Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 12 Sep 2024 10:17:14 +0200 Subject: [PATCH] update --- Cargo.lock | 82 ++++++++++++++++++------------------- src/json_store.rs | 11 ++++- src/location.rs | 1 + src/main.rs | 8 ++-- src/routes/item/location.rs | 21 ++++++++-- src/transaction.rs | 25 ++++++++--- 6 files changed, 92 insertions(+), 56 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4259621..5c77a26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -159,17 +159,17 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -252,9 +252,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.17.1" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -276,9 +276,9 @@ checksum = "fd6c0e7b807d60291f42f33f58480c0bfafe28ed08286446f45e463728cf9c1c" [[package]] name = "cc" -version = "1.1.15" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" dependencies = [ "shlex", ] @@ -327,18 +327,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -395,9 +395,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -805,9 +805,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "glob" @@ -1046,9 +1046,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is-terminal" @@ -1221,11 +1221,11 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -1243,7 +1243,7 @@ dependencies = [ [[package]] name = "mongod" version = "0.2.1" -source = "git+https://git.hydrar.de/jmarya/mongod#9784c3cac65e5a1305e4f0e4ec769316eacced3c" +source = "git+https://git.hydrar.de/jmarya/mongod#949340a7f28810768e408f4039dc1f1dc9cc1a82" dependencies = [ "chrono", "futures", @@ -1259,7 +1259,7 @@ dependencies = [ [[package]] name = "mongod_derive" version = "0.1.0" -source = "git+https://git.hydrar.de/jmarya/mongod#9784c3cac65e5a1305e4f0e4ec769316eacced3c" +source = "git+https://git.hydrar.de/jmarya/mongod#949340a7f28810768e408f4039dc1f1dc9cc1a82" dependencies = [ "case", "proc-macro2", @@ -1783,9 +1783,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.35" +version = "0.38.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" +checksum = "3f55e80d50763938498dd5ebb18647174e0c76dc38c5505294bb224624f30f36" dependencies = [ "bitflags 2.6.0", "errno", @@ -1891,9 +1891,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -1909,9 +1909,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -1920,9 +1920,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "indexmap", "itoa", @@ -2292,9 +2292,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -2303,9 +2303,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -2530,9 +2530,9 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" diff --git a/src/json_store.rs b/src/json_store.rs index 1ca83f2..4cd67ec 100644 --- a/src/json_store.rs +++ b/src/json_store.rs @@ -1,4 +1,7 @@ -use std::{collections::HashMap, ops::Deref}; +use std::{ + collections::HashMap, + ops::{Deref, DerefMut}, +}; use serde::Deserialize; @@ -42,3 +45,9 @@ impl Deref for JSONStore { &self.documents } } + +impl DerefMut for JSONStore { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.documents + } +} diff --git a/src/location.rs b/src/location.rs index 6db7930..aca348f 100644 --- a/src/location.rs +++ b/src/location.rs @@ -35,6 +35,7 @@ impl Validate for Location { impl ToAPI for Location { async fn api(&self) -> serde_json::Value { json!({ + "id": self._id, "name": self.name, "parent": self.parent, "conditions": self.conditions diff --git a/src/main.rs b/src/main.rs index 4a68325..08ab151 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use std::ops::Deref; +use std::ops::{Deref, DerefMut}; use json_store::JSONStore; use location::Location; @@ -49,10 +49,10 @@ async fn rocket() -> _ { .expect("error creating CORS options"); let itemdb = db::ItemDB::new("./itemdb").await; - let locations: JSONStore = JSONStore::new("./locations"); + let mut locations: JSONStore = JSONStore::new("./locations"); - for location in locations.deref() { - location.1.clone().add(location.0).await; + for location in locations.deref_mut() { + location.1.add(location.0).await; } let config = config::get_config(); diff --git a/src/routes/item/location.rs b/src/routes/item/location.rs index 3dfa161..5cf78b8 100644 --- a/src/routes/item/location.rs +++ b/src/routes/item/location.rs @@ -62,13 +62,13 @@ pub async fn locations_list( ) -> FallibleApiResponse { check_auth!(t, c); - let mut lst = Vec::with_capacity(locations.len()); + let mut ret = HashMap::::new(); - for id in locations.deref().keys() { - lst.push(id); + for l in locations.iter() { + ret.insert(l.0.clone(), l.1.api().await); } - Ok(json!(lst)) + Ok(json!(ret)) } #[get("/location_map")] @@ -98,3 +98,16 @@ pub async fn locations_info( Ok(serde_json::to_value(location_api).unwrap()) } + +#[get("/location//inventory")] +pub async fn location_inventory( + location: &str, + t: Token, + locations: &State>, + c: &State, +) -> FallibleApiResponse { + check_auth!(t, c); + + // todo : inventory + unimplemented!() +} diff --git a/src/transaction.rs b/src/transaction.rs index e0dc75d..08a5a8c 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -76,12 +76,16 @@ impl Transaction { } /// Consumes the Item with `price` and `destination` - pub async fn consume(&mut self, price: Price, destination: &str) { - self.update(&json!({ - "consumed": Consumed{destination: destination.to_string(),price, timestamp: chrono::Utc::now().timestamp() } - })) - .await - .ok().unwrap(); + pub async fn consume(self, price: Price, destination: &str) { + self.change() + .consumed(Some(Consumed { + destination: destination.to_string(), + price, + timestamp: chrono::Utc::now().timestamp(), + })) + .update() + .await + .unwrap(); } pub async fn is_expired(&self) -> bool { @@ -107,6 +111,15 @@ impl Transaction { false } + + pub async fn in_location(l: &str) -> Vec { + Self::find(doc! { "location": l}, None, None).await.unwrap() + } + + pub async fn in_location_recursive(l: &str) -> Vec { + // todo : search and merge sub locations + Self::find(doc! { "location": l}, None, None).await.unwrap() + } } impl mongod::ToAPI for Transaction {