This commit is contained in:
JMARyA 2024-06-22 02:16:21 +02:00
parent 4295bdcb8d
commit 3b0e8c1866
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
4 changed files with 133 additions and 101 deletions

52
src/routes/item/demand.rs Normal file
View file

@ -0,0 +1,52 @@
use rocket::serde::json::Json;
use rocket::{get, post, State};
use serde::Deserialize;
use serde_json::json;
use crate::variant::Variant;
use crate::{
db::ItemDB,
routes::{api_error, FallibleApiResponse},
};
use super::{item_does_not_exist_error, variant_does_not_exist_error};
#[derive(Debug, Deserialize)]
pub struct DemandForm {
uuid: String,
destination: String,
price: String,
}
#[post("/demand", data = "<f>")]
pub async fn demand_route(f: Json<DemandForm>) -> FallibleApiResponse {
let uuid = Variant::demand(
&f.uuid,
f.price
.clone()
.try_into()
.map_err(|()| api_error("Price malformed"))?,
&f.destination,
)
.await
.ok_or_else(|| api_error("Demand failed"))?;
Ok(json!({"uuid": uuid}))
}
#[get("/item/<item_id>/<variant_id>/demand")]
pub async fn demand_log_route(
item_id: &str,
variant_id: &str,
itemdb: &State<ItemDB>,
) -> FallibleApiResponse {
let variant = itemdb
.get_item(item_id)
.ok_or_else(item_does_not_exist_error)?
.variant(variant_id)
.ok_or_else(variant_does_not_exist_error)?;
let transactions = variant.demand_log().await;
Ok(json!(transactions))
}

9
src/routes/item/error.rs Normal file
View file

@ -0,0 +1,9 @@
use crate::routes::{api_error, ApiError};
pub fn item_does_not_exist_error() -> ApiError {
api_error("The item does not exist")
}
pub fn variant_does_not_exist_error() -> ApiError {
api_error("The item does not exist")
}

View file

@ -1,77 +1,22 @@
use rocket::serde::json::Json;
mod demand;
mod error;
mod supply;
pub use demand::*;
pub use error::*;
pub use supply::*;
use rocket::get;
use rocket::State;
use rocket::{get, post};
use serde::Deserialize;
use serde_json::json;
use crate::db::ItemDB;
use crate::transaction::Transaction;
use crate::variant::Variant;
use super::{api_error, ApiError, FallibleApiResponse};
pub fn item_does_not_exist_error() -> ApiError {
api_error("The item does not exist")
}
pub fn variant_does_not_exist_error() -> ApiError {
api_error("The item does not exist")
}
#[derive(Debug, Deserialize)]
pub struct DemandForm {
uuid: String,
destination: String,
price: String,
}
#[post("/demand", data = "<f>")]
pub async fn demand_route(f: Json<DemandForm>) -> FallibleApiResponse {
let uuid = Variant::demand(
&f.uuid,
f.price
.clone()
.try_into()
.map_err(|()| api_error("Price malformed"))?,
&f.destination,
)
.await
.ok_or_else(|| api_error("Demand failed"))?;
Ok(json!({"uuid": uuid}))
}
#[derive(Deserialize, Debug)]
pub struct SupplyForm {
item: String,
variant: String,
amount: Option<usize>,
price: String,
origin: String,
}
#[post("/supply", data = "<form>")]
pub async fn supply_route(form: Json<SupplyForm>, itemdb: &State<ItemDB>) -> FallibleApiResponse {
println!("{form:?}");
let variant = itemdb
.get_item(&form.item)
.ok_or_else(item_does_not_exist_error)?
.variant(&form.variant)
.ok_or_else(variant_does_not_exist_error)?;
let transaction_id = variant
.supply(
form.amount.unwrap_or(1),
form.price
.clone()
.try_into()
.map_err(|()| api_error("Price malformed"))?,
&form.origin,
)
.await;
Ok(json!({"uuid": transaction_id}))
}
use super::api_error;
use crate::routes::FallibleApiResponse;
/// Returns a JSON response with all items in the database.
#[get("/items")]
pub fn get_items_route(itemdb: &State<ItemDB>) -> serde_json::Value {
let items = itemdb.items();
@ -99,40 +44,6 @@ pub fn item_variants_page(item_id: &str, itemdb: &State<ItemDB>) -> FallibleApiR
}))
}
#[get("/item/<item_id>/<variant_id>/supply")]
pub async fn supply_log_route(
item_id: &str,
variant_id: &str,
itemdb: &State<ItemDB>,
) -> FallibleApiResponse {
let variant = itemdb
.get_item(item_id)
.ok_or_else(item_does_not_exist_error)?
.variant(variant_id)
.ok_or_else(variant_does_not_exist_error)?;
let transactions = variant.supply_log().await;
Ok(json!(transactions))
}
#[get("/item/<item_id>/<variant_id>/demand")]
pub async fn demand_log_route(
item_id: &str,
variant_id: &str,
itemdb: &State<ItemDB>,
) -> FallibleApiResponse {
let variant = itemdb
.get_item(item_id)
.ok_or_else(item_does_not_exist_error)?
.variant(variant_id)
.ok_or_else(variant_does_not_exist_error)?;
let transactions = variant.demand_log().await;
Ok(json!(transactions))
}
#[get("/transaction/<transaction>")]
pub async fn transaction_route(transaction: &str) -> FallibleApiResponse {
let t = Transaction::get(transaction)

60
src/routes/item/supply.rs Normal file
View file

@ -0,0 +1,60 @@
use rocket::serde::json::Json;
use rocket::{get, post, State};
use serde::Deserialize;
use serde_json::json;
use crate::{
db::ItemDB,
routes::{api_error, FallibleApiResponse},
};
use super::{item_does_not_exist_error, variant_does_not_exist_error};
#[derive(Deserialize, Debug)]
pub struct SupplyForm {
item: String,
variant: String,
amount: Option<usize>,
price: String,
origin: String,
}
#[post("/supply", data = "<form>")]
pub async fn supply_route(form: Json<SupplyForm>, itemdb: &State<ItemDB>) -> FallibleApiResponse {
println!("{form:?}");
let variant = itemdb
.get_item(&form.item)
.ok_or_else(item_does_not_exist_error)?
.variant(&form.variant)
.ok_or_else(variant_does_not_exist_error)?;
let transaction_id = variant
.supply(
form.amount.unwrap_or(1),
form.price
.clone()
.try_into()
.map_err(|()| api_error("Price malformed"))?,
&form.origin,
)
.await;
Ok(json!({"uuid": transaction_id}))
}
#[get("/item/<item_id>/<variant_id>/supply")]
pub async fn supply_log_route(
item_id: &str,
variant_id: &str,
itemdb: &State<ItemDB>,
) -> FallibleApiResponse {
let variant = itemdb
.get_item(item_id)
.ok_or_else(item_does_not_exist_error)?
.variant(variant_id)
.ok_or_else(variant_does_not_exist_error)?;
let transactions = variant.supply_log().await;
Ok(json!(transactions))
}