Skip to main content

web/pages/commodity/create/
validate.rs

1use axum::Json;
2use axum::response::IntoResponse;
3use serde::Deserialize;
4
5use crate::pages::HtmlTemplate;
6use crate::pages::validation::feedback::ValidationFeedback;
7
8#[derive(Deserialize)]
9pub struct SymbolValidation {
10    symbol: Option<String>,
11}
12
13pub async fn validate_symbol(Json(form): Json<SymbolValidation>) -> impl IntoResponse {
14    let symbol = match form.symbol {
15        Some(s) => s,
16        None => return HtmlTemplate(ValidationFeedback::error(t!("Symbol is required"))),
17    };
18
19    if symbol.is_empty() {
20        return HtmlTemplate(ValidationFeedback::error(t!("Symbol cannot be empty")));
21    }
22
23    if symbol.len() > 20 {
24        return HtmlTemplate(ValidationFeedback::error(
25            "Symbol cannot exceed 20 characters",
26        ));
27    }
28
29    HtmlTemplate(ValidationFeedback::success(t!("Ok")))
30}
31
32#[derive(Deserialize)]
33pub struct FullnameValidation {
34    name: Option<String>,
35}
36
37pub async fn validate_name(Json(form): Json<FullnameValidation>) -> impl IntoResponse {
38    let name = match form.name {
39        Some(n) => n,
40        None => return HtmlTemplate(ValidationFeedback::notice(t!("Full name is recommended"))),
41    };
42
43    if name.is_empty() {
44        return HtmlTemplate(ValidationFeedback::notice(t!("Full name is recommended")));
45    }
46
47    if name.len() < 2 {
48        return HtmlTemplate(ValidationFeedback::error(t!("Full name is too short")));
49    }
50
51    if name.len() > 100 {
52        return HtmlTemplate(ValidationFeedback::error(t!("Full name is too long")));
53    }
54
55    HtmlTemplate(ValidationFeedback::success(t!("Ok")))
56}