chore: normalize code #2

This commit is contained in:
Maulana Sodiqin
2025-05-18 03:12:20 +07:00
parent a43ef8ec04
commit e48507901e
15 changed files with 603 additions and 365 deletions
+81 -38
View File
@@ -1,8 +1,8 @@
use super::{UsersDetailItemDto, UsersListItemDto};
use crate::RolesItemDto;
use imphnen_utils::Crud;
use super::{UsersCreateRequestDto, UsersDetailQueryDto, UsersUpdateRequestDto};
use imphnen_libs::{ResourceEnum, hash_password};
use imphnen_utils::{get_iso_date, make_thing};
use serde::{Deserialize, Serialize};
use surrealdb::sql::Thing;
use surrealdb::{Uuid, sql::Thing};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UsersSchema {
@@ -21,46 +21,89 @@ pub struct UsersSchema {
pub updated_at: String,
}
impl Crud<UsersListItemDto, String> for UsersSchema {
fn list(&self, role: String) -> UsersListItemDto {
UsersListItemDto {
id: self.id.id.to_raw(),
role,
fullname: self.fullname.clone(),
email: self.email.clone(),
avatar: self.avatar.clone(),
phone_number: self.phone_number.clone(),
is_active: self.is_active,
created_at: self.created_at.clone(),
updated_at: self.updated_at.clone(),
}
}
}
impl Crud<UsersDetailItemDto, RolesItemDto> for UsersSchema {
fn detail(&self, role: RolesItemDto) -> UsersDetailItemDto {
UsersDetailItemDto {
id: self.id.id.to_raw(),
role,
fullname: self.fullname.clone(),
email: self.email.clone(),
avatar: self.avatar.clone(),
phone_number: self.phone_number.clone(),
is_active: self.is_active,
gender: self.gender.clone(),
birthdate: self.birthdate.clone(),
created_at: self.created_at.clone(),
updated_at: self.updated_at.clone(),
impl Default for UsersSchema {
fn default() -> Self {
Self {
id: Thing::from(("app_users", "dummy")),
fullname: "".into(),
email: "".into(),
password: "".into(),
avatar: None,
phone_number: "".into(),
is_active: false,
is_deleted: false,
gender: None,
birthdate: None,
role: Thing::from(("app_roles", "dummy")),
created_at: "".into(),
updated_at: "".into(),
}
}
}
impl UsersSchema {
pub fn list_from(&self, role: String) -> UsersListItemDto {
self.list(role)
pub fn from(dto: UsersDetailQueryDto) -> Self {
Self {
id: dto.id,
fullname: dto.fullname,
email: dto.email,
avatar: dto.avatar,
phone_number: dto.phone_number,
is_active: dto.is_active,
is_deleted: dto.is_deleted,
gender: dto.gender,
birthdate: dto.birthdate,
password: dto.password,
created_at: dto.created_at,
updated_at: dto.updated_at,
role: make_thing(&ResourceEnum::Roles.to_string(), &dto.role.id.to_string()),
}
}
pub fn detail_from(&self, role: RolesItemDto) -> UsersDetailItemDto {
self.detail(role)
pub fn update(user: UsersUpdateRequestDto, id: String) -> Self {
Self {
id: make_thing(&ResourceEnum::Users.to_string(), &id),
fullname: user.fullname,
email: user.email,
phone_number: user.phone_number,
is_active: user.is_active,
gender: user.gender,
birthdate: user.birthdate,
avatar: user.avatar,
is_deleted: false,
role: make_thing(&ResourceEnum::Roles.to_string(), &user.role_id),
updated_at: get_iso_date(),
..Default::default()
}
}
pub fn create(user: UsersCreateRequestDto) -> Self {
let password = hash_password(&user.password).unwrap();
Self {
id: make_thing(
&ResourceEnum::Users.to_string(),
&Uuid::new_v4().to_string(),
),
fullname: user.fullname,
email: user.email,
password,
phone_number: user.phone_number,
is_active: false,
gender: None,
birthdate: None,
avatar: None,
is_deleted: false,
role: make_thing(&ResourceEnum::Roles.to_string(), &user.role_id),
created_at: get_iso_date(),
updated_at: get_iso_date(),
}
}
pub fn patch_password(dto: UsersDetailQueryDto, password: String) -> Self {
Self {
password,
id: dto.id.clone(),
..Self::from(dto)
}
}
}