fix(dimentorin): register mentor flow - zod regex attr, uuid id override in user & mentor repos

- Remove broken zod_rs regex() attribute (always fails, blocks password validation)
- user repo create: honor entity.id instead of silently generating new v4 (broke FK mentor.user_id)
- mentor repo create: set id explicitly (was NULL not-null violation)
This commit is contained in:
asepharyana
2026-08-04 20:03:08 +07:00
parent 1d34d29b0b
commit 9b5efeff87
5 changed files with 8 additions and 5 deletions
@@ -13,7 +13,7 @@ use zod_rs::prelude::*;
pub struct MentorUserRegisterRequestDto { pub struct MentorUserRegisterRequestDto {
#[zod(email, min_length(1))] #[zod(email, min_length(1))]
pub email: String, pub email: String,
#[zod(min_length(8), regex(pattern = "^[A-Za-z\\d@$!%*?&]{8,}$"))] #[zod(min_length(8))]
pub password: String, pub password: String,
#[zod(min_length(2))] #[zod(min_length(2))]
pub fullname: String, pub fullname: String,
@@ -105,6 +105,7 @@ impl MentorRepository for PostgresMentorRepository {
async fn create(&self, entity: MentorEntity) -> Result<Uuid, AppError> { async fn create(&self, entity: MentorEntity) -> Result<Uuid, AppError> {
let active_model = MentorActiveModel { let active_model = MentorActiveModel {
id: ActiveValue::Set(Uuid::new_v4()),
user_id: ActiveValue::Set(entity.user_id), user_id: ActiveValue::Set(entity.user_id),
industries: ActiveValue::Set(Some( industries: ActiveValue::Set(Some(
serde_json::to_value(&entity.industries) serde_json::to_value(&entity.industries)
@@ -34,7 +34,7 @@ pub struct AuthLoginResponsetDto {
pub struct AuthRegisterRequestDto { pub struct AuthRegisterRequestDto {
#[zod(email, min_length(1))] #[zod(email, min_length(1))]
pub email: String, pub email: String,
#[zod(min_length(8), regex(pattern = "^[A-Za-z\\d@$!%*?&]{8,}$"))] #[zod(min_length(8))]
pub password: String, pub password: String,
#[zod(min_length(2))] #[zod(min_length(2))]
pub fullname: String, pub fullname: String,
@@ -89,7 +89,7 @@ impl ZodValidate for AuthRefreshTokenRequestDto {
pub struct AuthNewPasswordRequestDto { pub struct AuthNewPasswordRequestDto {
#[zod(min_length(1))] #[zod(min_length(1))]
pub token: String, pub token: String,
#[zod(min_length(8), regex(pattern = "^[A-Za-z\\d@$!%*?&]{8,}$"))] #[zod(min_length(8))]
pub password: String, pub password: String,
} }
@@ -29,7 +29,7 @@ pub struct UsersSetNewPasswordRequestDto {
pub struct UsersCreateRequestDto { pub struct UsersCreateRequestDto {
#[zod(email, min_length(1))] #[zod(email, min_length(1))]
pub email: String, pub email: String,
#[zod(min_length(8), regex(pattern = "^[A-Za-z\\d@$!%*?&]{8,}$"))] #[zod(min_length(8))]
pub password: String, pub password: String,
#[zod(min_length(2))] #[zod(min_length(2))]
pub fullname: String, pub fullname: String,
@@ -107,7 +107,9 @@ impl UserRepository for PostgresUserRepository {
.ok() .ok()
.or_else(|| entity.role.id.is_empty().then_some(Uuid::nil())); .or_else(|| entity.role.id.is_empty().then_some(Uuid::nil()));
let active_model = UserActiveModel { let active_model = UserActiveModel {
id: ActiveValue::Set(Uuid::new_v4()), id: ActiveValue::Set(
Uuid::parse_str(&entity.id).unwrap_or_else(|_| Uuid::new_v4()),
),
email: ActiveValue::Set(entity.email.clone()), email: ActiveValue::Set(entity.email.clone()),
password_hash: ActiveValue::Set(entity.password), password_hash: ActiveValue::Set(entity.password),
username: ActiveValue::Set(entity.email.clone()), username: ActiveValue::Set(entity.email.clone()),