feat(api): add URL parameter support to API endpoints

This commit is contained in:
ryan 2025-02-12 16:12:33 +03:00
parent e72ed778a2
commit 1a5c245250

View file

@ -8,9 +8,12 @@ use std::sync::Arc;
use tokio::sync::Mutex; use tokio::sync::Mutex;
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
pub async fn get_items(db: web::Data<Arc<Mutex<Database>>>) -> HttpResponse { pub async fn get_items(
db: web::Data<Arc<Mutex<Database>>>,
url: web::Query<String>,
) -> HttpResponse {
let db = db.lock().await; let db = db.lock().await;
match db.get_items().await { match db.get_items_by_url(&url).await {
Ok(items) => HttpResponse::Ok().json(items), Ok(items) => HttpResponse::Ok().json(items),
Err(err) => { Err(err) => {
leptos::logging::error!("Failed to fetch items: {:?}", err); leptos::logging::error!("Failed to fetch items: {:?}", err);
@ -22,10 +25,11 @@ pub async fn get_items(db: web::Data<Arc<Mutex<Database>>>) -> HttpResponse {
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
pub async fn create_item( pub async fn create_item(
db: web::Data<Arc<Mutex<Database>>>, db: web::Data<Arc<Mutex<Database>>>,
url: web::Query<String>,
item: web::Json<DbItem>, item: web::Json<DbItem>,
) -> HttpResponse { ) -> HttpResponse {
let db = db.lock().await; let db = db.lock().await;
match db.insert_item(&item.into_inner()).await { match db.insert_item_by_url(&url, &item.into_inner()).await {
Ok(_) => HttpResponse::Ok().body("Item inserted"), Ok(_) => HttpResponse::Ok().body("Item inserted"),
Err(err) => { Err(err) => {
leptos::logging::error!("Failed to insert item: {:?}", err); leptos::logging::error!("Failed to insert item: {:?}", err);
@ -37,10 +41,11 @@ pub async fn create_item(
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
pub async fn delete_item( pub async fn delete_item(
db: web::Data<Arc<Mutex<Database>>>, db: web::Data<Arc<Mutex<Database>>>,
url: web::Query<String>,
item_id: web::Path<String>, item_id: web::Path<String>,
) -> HttpResponse { ) -> HttpResponse {
let db = db.lock().await; let db = db.lock().await;
match db.delete_item(&item_id).await { match db.delete_item_by_url(&url, &item_id).await {
Ok(_) => HttpResponse::Ok().body("Item deleted"), Ok(_) => HttpResponse::Ok().body("Item deleted"),
Err(err) => { Err(err) => {
leptos::logging::error!("Failed to delete item: {:?}", err); leptos::logging::error!("Failed to delete item: {:?}", err);
@ -52,14 +57,78 @@ pub async fn delete_item(
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
pub async fn delete_property( pub async fn delete_property(
db: web::Data<Arc<Mutex<Database>>>, db: web::Data<Arc<Mutex<Database>>>,
url: web::Query<String>,
property: web::Path<String>, property: web::Path<String>,
) -> HttpResponse { ) -> HttpResponse {
let db = db.lock().await; let db = db.lock().await;
match db.delete_property(&property).await { match db.delete_property_by_url(&url, &property).await {
Ok(_) => HttpResponse::Ok().body("Property deleted"), Ok(_) => HttpResponse::Ok().body("Property deleted"),
Err(err) => { Err(err) => {
leptos::logging::error!("Failed to delete property: {:?}", err); leptos::logging::error!("Failed to delete property: {:?}", err);
HttpResponse::InternalServerError().body("Failed to delete property") HttpResponse::InternalServerError().body("Failed to delete property")
} }
} }
}
#[cfg(feature = "ssr")]
pub async fn get_items_by_url(
db: web::Data<Arc<Mutex<Database>>>,
url: web::Path<String>,
) -> HttpResponse {
let db = db.lock().await;
match db.get_items_by_url(&url).await {
Ok(items) => HttpResponse::Ok().json(items),
Err(err) => {
leptos::logging::error!("Failed to fetch items by URL: {:?}", err);
HttpResponse::InternalServerError().body("Failed to fetch items by URL")
}
}
}
#[cfg(feature = "ssr")]
pub async fn create_item_by_url(
db: web::Data<Arc<Mutex<Database>>>,
url: web::Path<String>,
item: web::Json<DbItem>,
) -> HttpResponse {
let db = db.lock().await;
match db.insert_item_by_url(&url, &item.into_inner()).await {
Ok(_) => HttpResponse::Ok().body("Item inserted"),
Err(err) => {
leptos::logging::error!("Failed to insert item by URL: {:?}", err);
HttpResponse::InternalServerError().body("Failed to insert item by URL")
}
}
}
#[cfg(feature = "ssr")]
pub async fn delete_item_by_url(
db: web::Data<Arc<Mutex<Database>>>,
url: web::Path<String>,
item_id: web::Path<String>,
) -> HttpResponse {
let db = db.lock().await;
match db.delete_item_by_url(&url, &item_id).await {
Ok(_) => HttpResponse::Ok().body("Item deleted"),
Err(err) => {
leptos::logging::error!("Failed to delete item by URL: {:?}", err);
HttpResponse::InternalServerError().body("Failed to delete item by URL")
}
}
}
#[cfg(feature = "ssr")]
pub async fn delete_property_by_url(
db: web::Data<Arc<Mutex<Database>>>,
url: web::Path<String>,
property: web::Path<String>,
) -> HttpResponse {
let db = db.lock().await;
match db.delete_property_by_url(&url, &property).await {
Ok(_) => HttpResponse::Ok().body("Property deleted"),
Err(err) => {
leptos::logging::error!("Failed to delete property by URL: {:?}", err);
HttpResponse::InternalServerError().body("Failed to delete property by URL")
}
}
} }