feat: finishing gacha feature

This commit is contained in:
Maulana Sodiqin
2025-05-21 19:37:30 +07:00
parent 33a2ae86c6
commit 465cbee2c3
10 changed files with 80 additions and 715 deletions
+10 -17
View File
@@ -1,24 +1,13 @@
use lazy_static::lazy_static;
use regex::Regex;
use crate::UsersDetailItemDto;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use validator::{Validate, ValidationError};
use crate::UsersDetailItemDto;
lazy_static! {
static ref PASSWORD_REGEX: Regex = Regex::new(
r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"
)
.unwrap();
}
fn validate_password_complexity(password: &str) -> Result<(), ValidationError> {
let has_uppercase = password.chars().any(|c| c.is_ascii_uppercase());
let has_lowercase = password.chars().any(|c| c.is_ascii_lowercase());
let has_digit = password.chars().any(|c| c.is_ascii_digit());
let has_special = password.chars().any(|c| "@$!%*?&".contains(c));
if has_uppercase && has_lowercase && has_digit && has_special {
Ok(())
} else {
@@ -98,10 +87,14 @@ pub struct AuthRefreshTokenRequestDto {
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)]
pub struct AuthNewPasswordRequestDto {
pub token: String,
#[validate(length(min = 1, message = "Token cannot be empty"))]
#[validate(regex(
path = "PASSWORD_REGEX",
pub token: String,
#[validate(length(
min = 8,
message = "Password must have at least 8 characters"
))]
#[validate(custom(
function = "validate_password_complexity",
message = "Password must include uppercase, lowercase, number, and special character"
))]
pub password: String,
@@ -118,8 +111,8 @@ pub struct AuthSetNewPasswordRequestDto {
min = 8,
message = "Password must have at least 8 characters"
))]
#[validate(regex(
path = "PASSWORD_REGEX",
#[validate(custom(
function = "validate_password_complexity",
message = "Password must include uppercase, lowercase, number, and special character"
))]
pub password: String,