diff --git a/src/main.rs b/src/main.rs index 1be144d..6c62264 100644 --- a/src/main.rs +++ b/src/main.rs @@ -401,6 +401,39 @@ async fn get_tags(_: Claims, request: web::Query) -> impl Resp } } +#[delete("image/tags")] +async fn remove_tagged_photo(_: Claims, request: web::Json) -> impl Responder { + use schema::tags; + match tags::table + .filter(tags::name.eq(&request.tag_name)) + .get_result::(&connect()) + .optional() + .and_then(|tag| { + if let Some(tag) = tag { + use schema::tagged_photo; + diesel::delete( + tagged_photo::table + .filter(tagged_photo::tag_id.eq(tag.id)) + .filter(tagged_photo::photo_name.eq(&request.file_name)), + ) + .execute(&connect()) + .map(|_| HttpResponse::Ok()) + } else { + info!("No tag found with name '{}'", &request.tag_name); + Ok(HttpResponse::NotFound()) + } + }) { + Ok(status) => status, + Err(err) => { + error!( + "Error removing tag '{}' from file: {}. {:?}", + &request.tag_name, &request.file_name, err + ); + HttpResponse::InternalServerError() + } + } +} + fn create_thumbnails() { let thumbs = &dotenv::var("THUMBNAILS").expect("THUMBNAILS not defined"); let thumbnail_directory: &Path = Path::new(thumbs); @@ -585,6 +618,7 @@ fn main() -> std::io::Result<()> { .service(get_file_metadata) .service(add_tag) .service(get_tags) + .service(remove_tagged_photo) .app_data(app_data.clone()) .data::>(Box::new(user_dao)) .data::>(Box::new(favorites_dao))