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 NameValidation {
10
    name: Option<String>,
11
}
12

            
13
pub async fn validate_name(Json(form): Json<NameValidation>) -> impl IntoResponse {
14
    let name = match &form.name {
15
        Some(s) if !s.trim().is_empty() => s,
16
        _ => return HtmlTemplate(ValidationFeedback::error("Account name is required")),
17
    };
18

            
19
    if name.len() < 2 {
20
        return HtmlTemplate(ValidationFeedback::error("Account name is too short"));
21
    }
22

            
23
    if name.len() > 50 {
24
        return HtmlTemplate(ValidationFeedback::error(
25
            "Account name is too long (max 50 characters)",
26
        ));
27
    }
28

            
29
    HtmlTemplate(ValidationFeedback::success("Valid account name"))
30
}