1
use axum::{
2
    Extension, Json,
3
    extract::Path,
4
    http::StatusCode,
5
    response::{IntoResponse, Redirect},
6
};
7
use server::command::transaction::DeleteTransaction;
8
use sqlx::types::Uuid;
9

            
10
use crate::jwt_auth::JWTAuthMiddleware;
11

            
12
pub 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
}