Skip to main content

web/pages/transaction/delete/
submit.rs

1use 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}