From b468aab088dbe72614478d995d1255dd7e6f5738 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 20 Sep 2024 12:53:22 +0200 Subject: [PATCH] add global item stat route --- src/main.rs | 3 ++- src/routes/item/mod.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 8acec75..924c31a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -91,7 +91,8 @@ async fn rocket() -> _ { routes::flow::continue_flow_route, routes::flow::create_flow_route, routes::item::move_transaction_route, - routes::item::variant_price_latest_by_origin + routes::item::variant_price_latest_by_origin, + routes::item::item_stat_route ], ) .manage(itemdb) diff --git a/src/routes/item/mod.rs b/src/routes/item/mod.rs index f8ff454..d01f8a1 100644 --- a/src/routes/item/mod.rs +++ b/src/routes/item/mod.rs @@ -41,6 +41,33 @@ pub fn get_items_route(itemdb: &State, t: Token, c: &State) -> F Ok(json!({"items": items})) } +#[get("/items/stat")] +pub async fn item_stat_route(itemdb: &State, t: Token, c: &State) -> FallibleApiResponse { + check_auth!(t, c); + + let items = itemdb.items(); + let item_count = items.len(); + let mut transaction_count = 0; + let mut total_price = 0.0; + + for item in items { + for var in itemdb.get_item(&item).unwrap().variants.keys() { + let item_var = itemdb.get_item(&item).unwrap().variant(var).unwrap(); + for t in item_var.inventory().await { + transaction_count += 1; + total_price += t.price.value; + } + } + } + + + Ok(json!({ + "item_count": item_count, + "total_transactions": transaction_count, + "total_price": total_price + })) +} + /// Return an API Response for an `Item` #[get("/item/")] pub fn item_route(