Added cases and items endpoints

This commit is contained in:
2025-03-15 21:16:59 +01:00
parent dbde062e01
commit cf92b4ede4
2 changed files with 120 additions and 0 deletions

61
src/cases.rs Normal file
View File

@@ -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<DataUuid>, app_state: Data<AppState>) -> 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<AppState>) -> 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<DataUuid>, app_state: Data<AppState>) -> 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())
}

59
src/items.rs Normal file
View File

@@ -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<DataUuid>, app_state: Data<AppState>) -> 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<AppState>) -> 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<DataUuid>, app_state: Data<AppState>) -> 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())
}