From cf92b4ede4b78acb347e49c59e540145f29cc681 Mon Sep 17 00:00:00 2001 From: AINDUSTRIES Date: Sat, 15 Mar 2025 21:16:59 +0100 Subject: [PATCH] Added cases and items endpoints --- src/cases.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/items.rs | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 src/cases.rs create mode 100644 src/items.rs diff --git a/src/cases.rs b/src/cases.rs new file mode 100644 index 0000000..e084fba --- /dev/null +++ b/src/cases.rs @@ -0,0 +1,61 @@ +use crate::AppState; +use actix_web::web::Data; +use actix_web::{get, web, HttpResponse, Responder}; +use serde::{Deserialize, Serialize}; +use serde_json::to_string; +use sqlx::query_as; +use crate::types::*; + + +#[get("/case")] +async fn get_case(query: web::Query, app_state: Data) -> impl Responder { + let case = query_as!(Case, "SELECT * FROM cases WHERE uuid = $1", query.uuid).fetch_one(&app_state.database).await; + if case.is_err() { + return HttpResponse::NotFound().finish(); + } + let json = to_string(&case.unwrap()); + if json.is_err() { + return HttpResponse::InternalServerError().finish(); + } + HttpResponse::Ok().body(json.unwrap()) +} + +#[get("/cases")] +async fn get_cases(app_state: Data) -> impl Responder { + let cases = query_as!(Case, "SELECT * FROM cases").fetch_all(&app_state.database).await; + if cases.is_err() { + return HttpResponse::NotFound().finish(); + } + let json = to_string(&cases.unwrap()); + if json.is_err() { + return HttpResponse::InternalServerError().finish(); + } + HttpResponse::Ok().body(json.unwrap()) +} + + +#[get("/case-items")] +async fn get_case_items(query: web::Query, app_state: Data) -> impl Responder { + let case = query_as!(Case, "SELECT * FROM cases WHERE uuid = $1", query.uuid).fetch_one(&app_state.database).await; + if case.is_err() { + return HttpResponse::NotFound().finish(); + } + let case = case.unwrap(); + let items_cases = query_as!(ItemCases, "SELECT * FROM items_cases WHERE \"case\" = $1", case.id).fetch_all(&app_state.database).await; + if items_cases.is_err() { + return HttpResponse::NotFound().finish(); + } + let items_cases = items_cases.unwrap(); + let mut items = vec![]; + for item_case in items_cases { + if let Ok(item) = query_as!(Item, "SELECT * FROM items WHERE id = $1", item_case.item).fetch_one(&app_state.database).await { + items.push(item); + } + } + let json = to_string(&items); + if json.is_err() { + return HttpResponse::InternalServerError().finish(); + } + HttpResponse::Ok().body(json.unwrap()) +} + diff --git a/src/items.rs b/src/items.rs new file mode 100644 index 0000000..3648aeb --- /dev/null +++ b/src/items.rs @@ -0,0 +1,59 @@ +use actix_web::{get, web, HttpResponse, Responder}; +use actix_web::web::Data; +use serde::{Deserialize, Serialize}; +use serde_json::to_string; +use sqlx::query_as; +use crate::AppState; +use crate::types::*; + + +#[get("/item")] +async fn get_item(query: web::Query, app_state: Data) -> impl Responder { + let item = query_as!(Item, "SELECT * FROM items WHERE uuid = $1", query.uuid).fetch_one(&app_state.database).await; + if item.is_err() { + return HttpResponse::NotFound().finish(); + } + let json = to_string(&item.unwrap()); + if json.is_err() { + return HttpResponse::InternalServerError().finish(); + } + HttpResponse::Ok().body(json.unwrap()) +} + +#[get("/items")] +async fn get_items(app_state: Data) -> impl Responder { + let items = query_as!(Item, "SELECT * FROM items").fetch_all(&app_state.database).await; + if items.is_err() { + return HttpResponse::NotFound().finish(); + } + let json = to_string(&items.unwrap()); + if json.is_err() { + return HttpResponse::InternalServerError().finish(); + } + HttpResponse::Ok().body(json.unwrap()) +} + +#[get("/item-cases")] +async fn get_item_cases(query: web::Query, app_state: Data) -> impl Responder { + let item = query_as!(Item, "SELECT * FROM items WHERE uuid = $1", query.uuid).fetch_one(&app_state.database).await; + if item.is_err() { + return HttpResponse::NotFound().finish(); + } + let item = item.unwrap(); + let items_cases = query_as!(ItemCases, "SELECT * FROM items_cases WHERE \"item\" = $1", item.id).fetch_all(&app_state.database).await; + if items_cases.is_err() { + return HttpResponse::NotFound().finish(); + } + let items_cases = items_cases.unwrap(); + let mut cases = vec![]; + for item_case in items_cases { + if let Ok(item) = query_as!(Case, "SELECT * FROM cases WHERE id = $1", item_case.item).fetch_one(&app_state.database).await { + cases.push(item); + } + } + let json = to_string(&cases); + if json.is_err() { + return HttpResponse::InternalServerError().finish(); + } + HttpResponse::Ok().body(json.unwrap()) +}