web/pages/transaction/delete/
submit.rs1use axum::{
2 Extension, Json,
3 extract::Path,
4 http::StatusCode,
5 response::{IntoResponse, Redirect},
6};
7use server::command::transaction::DeleteTransaction;
8use sqlx::types::Uuid;
9
10use crate::jwt_auth::JWTAuthMiddleware;
11
12pub async fn transaction_delete_submit(
13 Path(transaction_id): Path<String>,
14 Extension(jwt_auth): Extension<JWTAuthMiddleware>,
15) -> Result<impl IntoResponse, (StatusCode, Json<serde_json::Value>)> {
16 let user = &jwt_auth.user;
17
18 let tx_uuid = Uuid::parse_str(&transaction_id).map_err(|_| {
19 let error_response = serde_json::json!({
20 "status": "fail",
21 "message": "Invalid transaction ID format",
22 });
23 (StatusCode::BAD_REQUEST, Json(error_response))
24 })?;
25
26 match DeleteTransaction::new()
27 .user_id(user.id)
28 .transaction_id(tx_uuid)
29 .run()
30 .await
31 {
32 Ok(_) => Ok(Redirect::to("/transaction/list")),
33 Err(e) => {
34 let error_response = serde_json::json!({
35 "status": "fail",
36 "message": format!("Failed to delete transaction: {:?}", e),
37 });
38
39 log::error!("Failed to delete transaction: {e:?}");
40 Err((StatusCode::INTERNAL_SERVER_ERROR, Json(error_response)))
41 }
42 }
43}