Compare commits

...

2 Commits

Author SHA1 Message Date
665915f61b merge upstream
All checks were successful
mnemo-build-and-publish / gractwo-mnemo-build (push) Successful in 43s
2026-04-09 20:20:13 +00:00
acfd8a6d72 tag deletion 2026-04-09 22:19:41 +02:00
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/create", get(users::create::page))
.route("/users/create-form", post(users::create::create_user))
//
.route("/tags", get(tags::page))
.route("/tags/create", post(tags::create))
.route("/tags/{id}/delete", post(tags::delete_tag))
//
.route("/persons", get(persons::page))
.route("/persons/create", post(persons::create))

View File

@@ -1,11 +1,12 @@
use axum::{
Form,
extract::Request,
extract::{Path, Request},
http::HeaderMap,
response::{IntoResponse, Redirect, Response},
};
use maud::{PreEscaped, html};
use serde::Deserialize;
use uuid::Uuid;
use crate::{
database::{self},
@@ -62,6 +63,13 @@ pub async fn page(req: Request) -> Result<Response, AuthError> {
// div class="ml-2" {}
// "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()?;
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())
}