feat: initial commit

This commit is contained in:
Maulana Sodiqin
2025-03-20 22:41:20 +07:00
parent 955d384f96
commit a90e8662e1
13 changed files with 183 additions and 163 deletions
+3
View File
@@ -1,4 +1,7 @@
pub mod users_dto;
pub mod users_repository;
pub mod users_schema;
pub use users_dto::*;
pub use users_repository::*;
pub use users_schema::*;
+7
View File
@@ -1,6 +1,13 @@
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)]
pub struct UsersCreateRequestDto {
pub email: String,
pub fullname: String,
pub password: String,
}
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)]
pub struct UsersItemDto {
pub email: String,
+79
View File
@@ -0,0 +1,79 @@
use super::{UsersActiveInactiveSchema, UsersSetNewPasswordSchema};
use crate::{v1::users_schema::UsersSchema, AppState, ResourceEnum};
use anyhow::{bail, Result};
pub struct UsersRepository<'a> {
state: &'a AppState,
}
impl<'a> UsersRepository<'a> {
pub fn new(state: &'a AppState) -> Self {
Self { state }
}
pub async fn query_user_by_email(&self, email: String) -> Result<UsersSchema> {
let db = &self.state.surrealdb;
let result = db
.select((ResourceEnum::Users.to_string(), email.clone()))
.await?;
match result {
Some(response) => Ok(response),
None => {
bail!("User not found")
}
}
}
pub async fn query_create_user(&self, data: UsersSchema) -> Result<String> {
let db = &self.state.surrealdb;
let record: Option<UsersSchema> = db
.create((ResourceEnum::Users.to_string(), &data.email))
.content(UsersSchema {
fullname: data.fullname.clone(),
email: data.email.clone(),
password: data.password.clone(),
is_active: false,
})
.await?;
match record {
Some(_) => Ok("Success create user".into()),
None => bail!("Failed to create user"),
}
}
pub async fn query_active_inactive_user(
&self,
data: UsersActiveInactiveSchema,
) -> Result<String> {
let db = &self.state.surrealdb;
let record: Option<UsersActiveInactiveSchema> = db
.update((ResourceEnum::Users.to_string(), &data.email))
.merge(UsersActiveInactiveSchema {
email: data.email.clone(),
is_active: data.is_active.clone(),
})
.await?;
match record {
Some(_) => Ok("Success update user".into()),
None => bail!("Failed to update user"),
}
}
pub async fn query_update_password_user(
&self,
data: UsersSetNewPasswordSchema,
) -> Result<String> {
let db = &self.state.surrealdb;
let record: Option<UsersSetNewPasswordSchema> = db
.update((ResourceEnum::Users.to_string(), &data.email))
.merge(UsersSetNewPasswordSchema {
email: data.email.clone(),
password: data.password.clone(),
})
.await?;
match record {
Some(_) => Ok("Success update password user".into()),
None => bail!("Failed to update password user"),
}
}
}
+13 -2
View File
@@ -1,10 +1,21 @@
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Clone, Debug, Serialize, Deserialize, ToSchema)]
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UsersSchema {
pub email: String,
pub fullname: String,
pub password: String,
pub is_active: bool,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UsersSetNewPasswordSchema {
pub email: String,
pub password: bool,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct UsersActiveInactiveSchema {
pub email: String,
pub is_active: bool,
}