diff --git a/src/api.rs b/src/api.rs index de3d6b7..7d1c808 100644 --- a/src/api.rs +++ b/src/api.rs @@ -8,9 +8,12 @@ use std::sync::Arc; use tokio::sync::Mutex; #[cfg(feature = "ssr")] -pub async fn get_items(db: web::Data>>) -> HttpResponse { +pub async fn get_items( + db: web::Data>>, + url: web::Query, +) -> HttpResponse { let db = db.lock().await; - match db.get_items().await { + match db.get_items_by_url(&url).await { Ok(items) => HttpResponse::Ok().json(items), Err(err) => { leptos::logging::error!("Failed to fetch items: {:?}", err); @@ -22,10 +25,11 @@ pub async fn get_items(db: web::Data>>) -> HttpResponse { #[cfg(feature = "ssr")] pub async fn create_item( db: web::Data>>, + url: web::Query, item: web::Json, ) -> HttpResponse { 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"), Err(err) => { leptos::logging::error!("Failed to insert item: {:?}", err); @@ -37,10 +41,11 @@ pub async fn create_item( #[cfg(feature = "ssr")] pub async fn delete_item( db: web::Data>>, + url: web::Query, item_id: web::Path, ) -> HttpResponse { 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"), Err(err) => { leptos::logging::error!("Failed to delete item: {:?}", err); @@ -52,14 +57,78 @@ pub async fn delete_item( #[cfg(feature = "ssr")] pub async fn delete_property( db: web::Data>>, + url: web::Query, property: web::Path, ) -> HttpResponse { 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"), Err(err) => { leptos::logging::error!("Failed to delete property: {:?}", err); HttpResponse::InternalServerError().body("Failed to delete property") } } +} + +#[cfg(feature = "ssr")] +pub async fn get_items_by_url( + db: web::Data>>, + url: web::Path, +) -> 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>>, + url: web::Path, + item: web::Json, +) -> 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>>, + url: web::Path, + item_id: web::Path, +) -> 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>>, + url: web::Path, + property: web::Path, +) -> 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") + } + } } \ No newline at end of file