feat: Enhance user permissions and update event handling with improved response structures

This commit is contained in:
MythEclipse
2025-08-15 00:32:15 +07:00
parent 01e20baa45
commit 8402415649
11 changed files with 147 additions and 43 deletions
@@ -368,6 +368,7 @@ mod tests {
let auth_request = AuthRequest {
code: "4/0-ARAA6EeEKN8rlQ_Dh5XAAA_dCpKFwKa3-Jl9cO7I".to_string(),
state: "valid_state".to_string(),
redirect_uri: None,
};
let result = auth_request.validate();
@@ -379,6 +380,7 @@ mod tests {
let auth_request = AuthRequest {
code: "authorization/code/with/slashes".to_string(),
state: "valid_state".to_string(),
redirect_uri: None,
};
let result = auth_request.validate();
@@ -390,6 +392,7 @@ mod tests {
let auth_request = AuthRequest {
code: "authorization+code+with+plus".to_string(),
state: "valid_state".to_string(),
redirect_uri: None,
};
let result = auth_request.validate();
@@ -401,6 +404,7 @@ mod tests {
let auth_request = AuthRequest {
code: "authorization=code=with=equals=".to_string(),
state: "valid_state".to_string(),
redirect_uri: None,
};
let result = auth_request.validate();
@@ -412,6 +416,7 @@ mod tests {
let auth_request = AuthRequest {
code: "authorization@code#with$invalid%chars".to_string(),
state: "valid_state".to_string(),
redirect_uri: None,
};
let result = auth_request.validate();
@@ -423,6 +428,7 @@ mod tests {
let auth_request = AuthRequest {
code: "".to_string(),
state: "valid_state".to_string(),
redirect_uri: None,
};
let result = auth_request.validate();
@@ -441,6 +447,7 @@ mod tests {
let auth_request = AuthRequest {
code: "test_code".to_string(),
state: token,
redirect_uri: None,
};
// Validate and extract PKCE verifier
@@ -459,6 +466,7 @@ mod tests {
let auth_request = AuthRequest {
code: "test_code".to_string(),
state: token,
redirect_uri: None,
};
// Legacy validation should still work
+22 -16
View File
@@ -1,6 +1,7 @@
use super::{
UsersActiveInactiveRequestDto, UsersCreateRequestDto,
UsersSetNewPasswordRequestDto, UsersUpdateRequestDto,
users_dto::UsersDetailQueryDto, // Add this line
};
use crate::{
AppState, MetaRequestDto, ResponseListSuccessDto, UsersRepository, UsersSchema,
@@ -31,22 +32,27 @@ pub trait UsersServiceTrait: Send + Sync + 'static {
async fn update_user_password(state: &AppState, email: String, payload: UsersSetNewPasswordRequestDto) -> Response;
async fn get_user_by_mentor_id(state: &AppState, mentor_id: String) -> Response;
async fn delete_user(state: &AppState, id: String) -> Response;
async fn get_user_by_email(&self, email: &str, state: &AppState) -> Result<Option<UserDto>>;
async fn create_user_by_dto(&self, new_user: CreateUserDto, state: &AppState) -> Result<UserDto>;
async fn update_user_avatar(&self, email: &str, avatar_url: Option<String>, state: &AppState) -> Result<()>;
async fn upload_file(state: &AppState, user_id: String, multipart: Multipart) -> Response;
}
#[derive(Clone)]
pub struct UsersService;
impl UsersService {
}
#[async_trait]
impl UsersServiceTrait for UsersService {
async fn get_user_list(state: &AppState, meta: MetaRequestDto) -> Response {
async fn get_user_by_id_internal(&self, id: &surrealdb::sql::Thing, state: &AppState) -> Result<UsersDetailQueryDto>;
async fn get_user_by_email(&self, email: &str, state: &AppState) -> Result<Option<UserDto>>;
async fn create_user_by_dto(&self, new_user: CreateUserDto, state: &AppState) -> Result<UserDto>;
async fn update_user_avatar(&self, email: &str, avatar_url: Option<String>, state: &AppState) -> Result<()>;
async fn upload_file(state: &AppState, user_id: String, multipart: Multipart) -> Response;
}
#[derive(Clone)]
pub struct UsersService;
impl UsersService {
}
#[async_trait]
impl UsersServiceTrait for UsersService {
async fn get_user_by_id_internal(&self, id: &surrealdb::sql::Thing, state: &AppState) -> Result<UsersDetailQueryDto> {
let repo = crate::UsersRepository::new(state);
repo.query_user_by_id(id).await
}
async fn get_user_list(state: &AppState, meta: MetaRequestDto) -> Response {
let repo = UsersRepository::new(state);
match repo.query_user_list(meta).await {
Ok(data) => {