tag deletion

This commit is contained in:
2026-04-09 22:19:41 +02:00
parent 34f48c2b3d
commit acfd8a6d72
2 changed files with 29 additions and 1 deletions

View File

@@ -27,8 +27,10 @@ pub fn pages() -> Router {
.route("/users/{id}", get(users::profile::page)) .route("/users/{id}", get(users::profile::page))
.route("/users/create", get(users::create::page)) .route("/users/create", get(users::create::page))
.route("/users/create-form", post(users::create::create_user)) .route("/users/create-form", post(users::create::create_user))
//
.route("/tags", get(tags::page)) .route("/tags", get(tags::page))
.route("/tags/create", post(tags::create)) .route("/tags/create", post(tags::create))
.route("/tags/{id}/delete", post(tags::delete_tag))
// //
.route("/persons", get(persons::page)) .route("/persons", get(persons::page))
.route("/persons/create", post(persons::create)) .route("/persons/create", post(persons::create))

View File

@@ -1,11 +1,12 @@
use axum::{ use axum::{
Form, Form,
extract::Request, extract::{Path, Request},
http::HeaderMap, http::HeaderMap,
response::{IntoResponse, Redirect, Response}, response::{IntoResponse, Redirect, Response},
}; };
use maud::{PreEscaped, html}; use maud::{PreEscaped, html};
use serde::Deserialize; use serde::Deserialize;
use uuid::Uuid;
use crate::{ use crate::{
database::{self}, database::{self},
@@ -62,6 +63,13 @@ pub async fn page(req: Request) -> Result<Response, AuthError> {
// div class="ml-2" {} // div class="ml-2" {}
// "0" span class="*:size-3 ml-1 text-neutral-400" {(PreEscaped(icons::FILE_IMAGE))} // "0" span class="*:size-3 ml-1 text-neutral-400" {(PreEscaped(icons::FILE_IMAGE))}
} }
@if let Ok(0) = tag.get_tagged_quotes_count(&conn) {
form action=(format!("/tags/{}/delete", tag.id)) method="post" class="flex items-center ml-1" {
button type="submit" class="text-neutral-500 hover:text-red-400 text-sm flex items-center justify-center cursor-pointer" title="Delete" {
""
}
}
}
} }
} }
} }
@@ -112,3 +120,21 @@ pub async fn create(
tx.commit()?; tx.commit()?;
Ok(Redirect::to("/tags").into_response()) Ok(Redirect::to("/tags").into_response())
} }
pub async fn delete_tag(
Path(id): Path<Uuid>,
headers: HeaderMap,
) -> Result<Response, CompositeError> {
let u = User::authenticate(&headers)?.required()?;
let mut conn = database::conn()?;
let tx = conn.transaction()?;
let t = Tag::get_by_id(&tx, id)?;
let name = t.name.as_str().to_string();
t.delete(&tx)?;
LogEntry::new(&tx, u, LogAction::DeleteTag { id, name })?;
tx.commit()?;
Ok(Redirect::to("/tags").into_response())
}