Lines
0 %
Functions
Branches
100 %
use axum::{Extension, Json, extract::Query, http::StatusCode};
use serde::{Deserialize, Serialize};
use crate::jwt_auth::JWTAuthMiddleware;
#[derive(Serialize)]
pub struct TagSuggestion {
name: String,
value: Option<String>,
}
pub async fn transaction_tag_names(
Extension(jwt_auth): Extension<JWTAuthMiddleware>,
) -> Result<Json<Vec<TagSuggestion>>, (StatusCode, Json<serde_json::Value>)> {
let user = &jwt_auth.user;
let server_user = server::user::User { id: user.id };
match server_user.list_transaction_tag_names().await {
Ok(names) => {
let suggestions = names
.into_iter()
.map(|name| TagSuggestion { name, value: None })
.collect();
Ok(Json(suggestions))
Err(e) => {
let error_response = serde_json::json!({
"status": "fail",
"message": "Failed to fetch transaction tag names",
});
log::error!("Failed to fetch transaction tag names: {e:?}");
Err((StatusCode::INTERNAL_SERVER_ERROR, Json(error_response)))
#[derive(Deserialize)]
pub struct TagValuesQuery {
pub async fn transaction_tag_values(
Query(query): Query<TagValuesQuery>,
match server_user.list_transaction_tag_values(&query.name).await {
Ok(values) => {
let suggestions = values
.map(|value| TagSuggestion {
name: value.clone(),
value: Some(value),
})
"message": "Failed to fetch transaction tag values",
log::error!(
"Failed to fetch transaction tag values for '{}': {e:?}",
query.name
);
pub async fn split_tag_names(
match server_user.list_split_tag_names().await {
"message": "Failed to fetch split tag names",
log::error!("Failed to fetch split tag names: {e:?}");
pub async fn split_tag_values(
match server_user.list_split_tag_values(&query.name).await {
"message": "Failed to fetch split tag values",
"Failed to fetch split tag values for '{}': {e:?}",