update
This commit is contained in:
parent
7f32f2429e
commit
65bfb5f8e2
10 changed files with 60 additions and 55 deletions
52
Cargo.lock
generated
52
Cargo.lock
generated
|
@ -225,9 +225,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bson"
|
name = "bson"
|
||||||
version = "2.12.0"
|
version = "2.13.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "80cf6f7806607bd58ad490bab34bf60e25455ea4aaf995f897a13324d41ea580"
|
checksum = "068208f2b6fcfa27a7f1ee37488d2bb8ba2640f68f5475d08e1d9130696aba59"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"base64 0.13.1",
|
"base64 0.13.1",
|
||||||
|
@ -264,9 +264,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytes"
|
name = "bytes"
|
||||||
version = "1.7.1"
|
version = "1.7.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
|
checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "case"
|
name = "case"
|
||||||
|
@ -276,9 +276,9 @@ checksum = "fd6c0e7b807d60291f42f33f58480c0bfafe28ed08286446f45e463728cf9c1c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.1.18"
|
version = "1.1.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476"
|
checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"shlex",
|
"shlex",
|
||||||
]
|
]
|
||||||
|
@ -328,18 +328,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.17"
|
version = "4.5.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac"
|
checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.17"
|
version = "4.5.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73"
|
checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
|
@ -1006,9 +1006,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iana-time-zone"
|
name = "iana-time-zone"
|
||||||
version = "0.1.60"
|
version = "0.1.61"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
|
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_system_properties",
|
"android_system_properties",
|
||||||
"core-foundation-sys",
|
"core-foundation-sys",
|
||||||
|
@ -2038,9 +2038,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "security-framework-sys"
|
name = "security-framework-sys"
|
||||||
version = "2.11.1"
|
version = "2.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf"
|
checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"core-foundation-sys",
|
"core-foundation-sys",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -2394,18 +2394,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.63"
|
version = "1.0.64"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
|
checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror-impl",
|
"thiserror-impl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror-impl"
|
name = "thiserror-impl"
|
||||||
version = "1.0.63"
|
version = "1.0.64"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
|
checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -2565,9 +2565,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_edit"
|
name = "toml_edit"
|
||||||
version = "0.22.20"
|
version = "0.22.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
|
checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -2763,9 +2763,9 @@ checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-normalization"
|
name = "unicode-normalization"
|
||||||
version = "0.1.23"
|
version = "0.1.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
|
checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tinyvec",
|
"tinyvec",
|
||||||
]
|
]
|
||||||
|
@ -2778,15 +2778,15 @@ checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-width"
|
name = "unicode-width"
|
||||||
version = "0.1.13"
|
version = "0.1.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"
|
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-xid"
|
name = "unicode-xid"
|
||||||
version = "0.2.5"
|
version = "0.2.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a"
|
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unsafe-libyaml"
|
name = "unsafe-libyaml"
|
||||||
|
|
5
docs/Flow.md
Normal file
5
docs/Flow.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Flow
|
||||||
|
A flow is used to represent a workflow or manufacturing process.
|
||||||
|
|
||||||
|
## Flow Info
|
||||||
|
You define a flow within a JSON file stored in `./flows`.
|
|
@ -64,4 +64,3 @@ variants:
|
||||||
```
|
```
|
||||||
|
|
||||||
This will mark any item variant as expired if it's older than 30 days.
|
This will mark any item variant as expired if it's older than 30 days.
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,13 @@
|
||||||
# CDB Documentation
|
# CDB Documentation
|
||||||
|
|
||||||
- Item
|
## Basic Concepts
|
||||||
- Location
|
- [Item](./Item.md)
|
||||||
- Statistics
|
- [Transaction](./Transaction.md)
|
||||||
- Transaction
|
- [Location](./Location.md)
|
||||||
- Webhooks
|
|
||||||
|
## Pipelines
|
||||||
|
- [Flow](./Flow.md)
|
||||||
|
|
||||||
|
## Advanced
|
||||||
|
- [Statistics](./Statistics.md)
|
||||||
|
- [Webhooks](./Webhooks.md)
|
||||||
|
|
|
@ -8,10 +8,11 @@ Transactions can carry some information:
|
||||||
- Price - The price this item was acquired at
|
- Price - The price this item was acquired at
|
||||||
- Origin - Where this item is from
|
- Origin - Where this item is from
|
||||||
- Location - The [Location](Location.md) of the item
|
- Location - The [Location](Location.md) of the item
|
||||||
|
- Note - General notes
|
||||||
|
|
||||||
## Consume
|
## Consume
|
||||||
If an item gets used or is removed from the inventory, you consume the transaction.
|
If an item gets used or is removed from the inventory, you consume the transaction.
|
||||||
|
|
||||||
This adds some additional information to it:
|
This adds some additional information to it:
|
||||||
- Price - The price of the item at removal. e.g the selling price, or if negative cost of removal
|
- Price - The price of the item at removal. e.g a selling price, or a negative value can represent cost of removal
|
||||||
- Destination - Where this item went, e.g a person who requested this item
|
- Destination - Where this item went, e.g a person who requested this item
|
||||||
|
|
27
src/db.rs
27
src/db.rs
|
@ -1,10 +1,12 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use mongod::Model;
|
use mongod::Model;
|
||||||
|
|
||||||
use crate::item::Item;
|
use crate::item::Item;
|
||||||
|
|
||||||
/// Item database
|
/// Item database
|
||||||
pub struct ItemDB {
|
pub struct ItemDB {
|
||||||
index: mdq::Index,
|
index: HashMap<String, Item>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ItemDB {
|
impl ItemDB {
|
||||||
|
@ -13,34 +15,27 @@ impl ItemDB {
|
||||||
/// The directory should contain markdown documents with valid frontmatter to be parsed into `Item`s
|
/// The directory should contain markdown documents with valid frontmatter to be parsed into `Item`s
|
||||||
pub async fn new(dir: &str) -> Self {
|
pub async fn new(dir: &str) -> Self {
|
||||||
// scan for markdown item entries
|
// scan for markdown item entries
|
||||||
let index = mdq::Index::new(dir, true);
|
let index = mdq::Index::new(dir, false);
|
||||||
|
let mut items = HashMap::new();
|
||||||
|
|
||||||
for item in &index.documents {
|
for item in &index.documents {
|
||||||
let item = Item::new(item);
|
let item = Item::new(item);
|
||||||
item.insert_overwrite().await.unwrap();
|
item.insert_overwrite().await.unwrap();
|
||||||
log::info!("Adding item {} to DB", item.name);
|
log::info!("Adding item {} to DB", item.name);
|
||||||
|
items.insert(item._id.clone(), item);
|
||||||
}
|
}
|
||||||
|
|
||||||
Self { index }
|
Self { index: items }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Retrieves an item by name
|
/// Retrieves an item by name
|
||||||
pub fn get_item(&self, item: &str) -> Option<Item> {
|
pub fn get_item(&self, item: &str) -> Option<&Item> {
|
||||||
self.index
|
self.index.get(item)
|
||||||
.documents
|
|
||||||
.iter()
|
|
||||||
.map(Item::new) // <-- todo : performance?
|
|
||||||
.find(|x| x._id == item)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get all items
|
/// Get all items
|
||||||
pub fn items(&self) -> Vec<String> {
|
pub fn items(&self) -> Vec<&String> {
|
||||||
let mut ret = vec![];
|
self.index.keys().collect()
|
||||||
for item in &self.index.documents {
|
|
||||||
let item = Item::new(item);
|
|
||||||
ret.push(item._id.clone());
|
|
||||||
}
|
|
||||||
ret
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,5 +80,5 @@ pub fn verify_item_variant_exists(item_variant: &str, id: &str, itemdb: &ItemDB)
|
||||||
return Some(true);
|
return Some(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return None;
|
None
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,7 @@ impl Validate for Location {
|
||||||
|
|
||||||
impl Location {
|
impl Location {
|
||||||
/// Recursively get the conditions of a location. This inherits from parent locations.
|
/// Recursively get the conditions of a location. This inherits from parent locations.
|
||||||
pub fn conditions_rec<'a>(
|
pub fn conditions_rec(&self) -> futures::future::BoxFuture<'_, Option<StorageConditions>> {
|
||||||
&'a self,
|
|
||||||
) -> futures::future::BoxFuture<'a, Option<StorageConditions>> {
|
|
||||||
async move {
|
async move {
|
||||||
if let Some(cond) = &self.conditions {
|
if let Some(cond) = &self.conditions {
|
||||||
return Some(cond.clone());
|
return Some(cond.clone());
|
||||||
|
@ -64,7 +62,7 @@ impl Location {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all children locations
|
// Get all children locations
|
||||||
pub fn children_recursive<'a>(&'a self) -> futures::future::BoxFuture<'a, Vec<Location>> {
|
pub fn children_recursive(&self) -> futures::future::BoxFuture<'_, Vec<Location>> {
|
||||||
async move {
|
async move {
|
||||||
let mut all = Vec::new();
|
let mut all = Vec::new();
|
||||||
|
|
||||||
|
|
|
@ -185,6 +185,7 @@ impl mongod::ToAPI for Transaction {
|
||||||
"variant": self.variant,
|
"variant": self.variant,
|
||||||
"price": self.price,
|
"price": self.price,
|
||||||
"origin": self.origin,
|
"origin": self.origin,
|
||||||
|
"location": self.location.as_ref().map(|x| x.id().to_string()),
|
||||||
"timestamp": self.timestamp,
|
"timestamp": self.timestamp,
|
||||||
"consumed": self.consumed,
|
"consumed": self.consumed,
|
||||||
"note": self.note,
|
"note": self.note,
|
||||||
|
|
|
@ -305,7 +305,7 @@ pub fn unique_flows(i: &[String]) -> Vec<String> {
|
||||||
if let Some(suffix) = s.strip_prefix("flow::") {
|
if let Some(suffix) = s.strip_prefix("flow::") {
|
||||||
// Extract the part after "flow::" and split on "::" to get the kind (ignoring id)
|
// Extract the part after "flow::" and split on "::" to get the kind (ignoring id)
|
||||||
let parts: Vec<&str> = suffix.split("::").collect();
|
let parts: Vec<&str> = suffix.split("::").collect();
|
||||||
if let Some(kind) = parts.get(0) {
|
if let Some(kind) = parts.first() {
|
||||||
// Build the common prefix "flow::kind"
|
// Build the common prefix "flow::kind"
|
||||||
let common_prefix = format!("flow::{}", kind);
|
let common_prefix = format!("flow::{}", kind);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue