use crate::RolesItemDto; use lazy_static::lazy_static; use regex::Regex; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use validator::Validate; lazy_static! { static ref PASSWORD_REGEX: Regex = Regex::new(r"^[A-Za-z\d@$!%*?&]{8,}$").unwrap(); } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthLoginRequestDto { #[validate( length(min = 1, message = "Email cannot be empty"), email(message = "Email not valid") )] pub email: String, #[validate(length(min = 1, message = "Password cannot be empty"))] pub password: String, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] pub struct AuthUserItemDto { pub id: String, pub role: RolesItemDto, pub fullname: String, pub email: String, pub avatar: Option, pub phone_number: String, pub referred_by: Option, pub referral_code: Option, pub student_type: String, pub is_active: bool, pub is_profile_completed: bool, pub identity_number: Option, pub religion: Option, pub gender: Option, pub birthdate: Option, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] pub struct AuthLoginResponsetDto { pub token: TokenDto, pub user: AuthUserItemDto, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema)] pub struct TokenDto { pub access_token: String, pub refresh_token: String, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthRegisterRequestDto { #[validate( length(min = 1, message = "Email cannot be empty"), email(message = "Email not valid") )] pub email: String, #[validate(length( min = 8, message = "Password must have at least 8 characters" ))] #[validate(regex( path = "PASSWORD_REGEX", message = "Password must include uppercase, lowercase, number, and special character" ))] pub password: String, #[validate(length(min = 2, message = "Fullname at least have 2 character"))] pub fullname: String, #[validate(length(min = 1, message = "Student type is required"))] pub student_type: String, #[validate(length( min = 10, message = "Phone number at least have 10 character" ))] pub phone_number: String, #[validate(length( max = 4, message = "Referal code cannot be more than 4 character" ))] pub referral_code: Option, pub referred_by: Option, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthActiveInactiveRequestDto { pub is_active: bool, #[validate( length(min = 1, message = "Email cannot be empty"), email(message = "Email not valid") )] pub email: String, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthVerifyEmailRequestDto { #[validate( length(min = 1, message = "Email cannot be empty"), email(message = "Email not valid") )] pub email: String, pub otp: u32, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthResendOtpRequestDto { #[validate( length(min = 1, message = "Email cannot be empty"), email(message = "Email not valid") )] pub email: String, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthRefreshTokenRequestDto { #[validate(length(min = 1, message = "Refresh token cannot be empty"))] pub refresh_token: String, } #[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", message = "Password must include uppercase, lowercase, number, and special character" ))] pub password: String, } #[derive(Clone, Debug, Serialize, Deserialize, ToSchema, Validate)] pub struct AuthSetNewPasswordRequestDto { #[validate( length(min = 1, message = "Email cannot be empty"), email(message = "Email not valid") )] pub email: String, #[validate(length( min = 8, message = "Password must have at least 8 characters" ))] #[validate(regex( path = "PASSWORD_REGEX", message = "Password must include uppercase, lowercase, number, and special character" ))] pub password: String, }