1
use axum::Json;
2
use axum::response::IntoResponse;
3
use serde::Deserialize;
4

            
5
use crate::pages::HtmlTemplate;
6
use crate::pages::validation::feedback::ValidationFeedback;
7

            
8
#[derive(Deserialize)]
9
pub struct SymbolValidation {
10
    symbol: Option<String>,
11
}
12

            
13
pub 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)]
33
pub struct FullnameValidation {
34
    name: Option<String>,
35
}
36

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