From 7fd537a9481c76e0015c4c9fcb46a9dd0e1321b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Tue, 29 Sep 2020 00:55:09 +0200 Subject: [PATCH] add DELETE endpoint for objects, update URLs (/get/ -> /obj/) --- src/routes.rs | 22 +++++++++++++++++++--- ui/src/views/Inspect.vue | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/routes.rs b/src/routes.rs index f1e4779..47f4824 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -1,10 +1,10 @@ use crate::addressing::Address; -use crate::database::{retrieve_file, retrieve_object, DbPool, Entry}; +use crate::database::{remove_object, retrieve_file, retrieve_object, DbPool, Entry}; use crate::filesystem::{list_directory, lookup_by_filename, UPath}; use crate::hash::{decode, encode}; use actix_files::NamedFile; use actix_web::error::{ErrorBadRequest, ErrorInternalServerError, ErrorNotFound}; -use actix_web::{error, get, post, web, Error, HttpResponse}; +use actix_web::{delete, error, get, post, web, Error, HttpResponse}; use anyhow::Result; use log::debug; use serde::Deserialize; @@ -39,7 +39,7 @@ pub async fn get_raw(state: web::Data, hash: web::Path) -> Result } } -#[get("/api/get/{address_str}")] +#[get("/api/obj/{address_str}")] pub async fn get_object( state: web::Data, address_str: web::Path, @@ -60,6 +60,22 @@ pub async fn get_object( Ok(HttpResponse::Ok().json(result)) } +#[delete("/api/obj/{address_str}")] +pub async fn delete_object( + state: web::Data, + address_str: web::Path, +) -> Result { + let connection = state.db_pool.get().map_err(ErrorInternalServerError)?; + let _ = remove_object( + &connection, + Address::decode(&decode(address_str.into_inner()).map_err(ErrorBadRequest)?) + .map_err(ErrorInternalServerError)?, + ) + .map_err(ErrorInternalServerError)?; + + Ok(HttpResponse::Ok().finish()) +} + #[get("/api/hier/{path:.*}")] pub async fn list_hier( state: web::Data, diff --git a/ui/src/views/Inspect.vue b/ui/src/views/Inspect.vue index e198cc9..477f377 100644 --- a/ui/src/views/Inspect.vue +++ b/ui/src/views/Inspect.vue @@ -84,7 +84,7 @@ export default defineComponent({ } }, setup(props) { - const {data, error} = useSWRV(() => `/api/get/${props.address}`, fetcher); + const {data, error} = useSWRV(() => `/api/obj/${props.address}`, fetcher); return { data,