web/pages/commodity/create/
validate.rs1use 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}