Refactor and enhance SurrealDB integration and resource management

- Updated `lib.rs` to selectively expose specific entities and services for better clarity.
- Improved SurrealDB client initialization with detailed logging in `surrealdb/mod.rs`.
- Enhanced resource definitions in `resource.rs` with additional utility methods for better resource management.
- Refactored user data retrieval logic in `auth_middleware/mod.rs` for improved readability and efficiency.
- Cleaned up middleware exports in `lib.rs` for clearer API surface.
- Added detailed comments and documentation throughout the SurrealDB module for better maintainability.
- Updated tests to ensure compatibility with new changes and improved structure.
- Introduced new permissions module structure in `imphnen-utils` for future enhancements.
This commit is contained in:
MythEclipse
2025-09-26 17:35:30 +07:00
parent 96debc210a
commit 14b22328de
71 changed files with 1566 additions and 632 deletions
+91 -4
View File
@@ -1,6 +1,93 @@
pub mod v1;
pub use imphnen_entities::*;
pub use imphnen_libs::*;
pub use imphnen_utils::*;
pub use v1::*;
// Re-export core entity types used throughout the IAM module
pub use imphnen_entities::{
MessageResponseDto,
MetaRequestDto,
MetaResponseDto,
ResponseSuccessDto,
ResponseListSuccessDto,
CountResult,
Error,
ExperienceDto,
EducationDto,
UsersDetailQueryDto,
PermissionsEnum,
PermissionsItemDto,
PermissionsQueryDto,
};
// Explicitly export only the imphnen_libs types actually used in IAM
pub use imphnen_libs::{
AppState,
ResourceEnum,
decode_access_token,
decode_refresh_token,
encode_access_token,
encode_refresh_token,
encode_reset_password_token,
hash_password,
send_email,
verify_password,
Env,
SurrealWsClient,
SurrealMemClient,
UserLookupService,
AuthRepositoryTrait,
jsonwebtoken::Claims,
};
// Explicitly export only the imphnen_utils types actually used in IAM
pub use imphnen_utils::{
make_thing,
make_thing_from_enum,
get_id,
get_iso_date,
extract_id,
build_multi_thing_condition,
execute_safe_update_query,
DetailQueryBuilder,
QueryListBuilder,
success_response,
success_list_response,
common_response,
validate_request,
generate_oauth_csrf_token,
validate_oauth_csrf_token,
validate_csrf_token,
extract_email_token_async,
OtpManager,
};
// Export the main router functions and types from v1 module
pub use v1::{
iam_public_routes,
iam_protected_routes,
auth_router,
users_router,
roles_router,
permissions_router,
teams_router,
permissions_guard,
};
// Export IAM-specific types
pub use v1::auth::{
AuthRepository, AuthOtpSchema,
AuthLoginRequestDto, AuthLoginResponsetDto, AuthRegisterRequestDto,
AuthResendOtpRequestDto, AuthVerifyEmailRequestDto,
AuthNewPasswordRequestDto, AuthRefreshTokenRequestDto,
TokenDto, UserCacheSchema,
};
pub use v1::permissions::{PermissionsRepository, PermissionsSchema};
pub use v1::roles::{RolesRepository, RolesSchema, RolesEnum, RolesDetailQueryDto, RolesRequestCreateDto, RolesRequestUpdateDto, RolesDetailItemDto};
pub use v1::teams::{
TeamsRepository, TeamsSchema, TeamsCreateRequestDto, TeamsUpdateRequestDto,
TeamInviteRequestDto, TeamMemberDto, AdminTeamsListItemDto,
AdminTeamsDetailItemDto, TeamsDetailItemDto, TeamsListItemDto,
TeamAcceptInvitationRequestDto, TeamsSearchQueryDto, PublicTeamsListItemDto,
PublicTeamsDetailItemDto, TeamsDetailQueryDto, TeamsListQueryDto,
TeamMembersSchema, TeamInvitationsSchema, TeamMembersQueryDto,
TeamInvitationsQueryDto, MemberTeamsDetailItemDto,
};
pub use v1::users::{UsersRepository, UsersSchema, UsersDetailItemDto, UsersCreateRequestDto};
+1 -1
View File
@@ -2,7 +2,7 @@ use super::{
AuthLoginRequestDto, AuthRefreshTokenRequestDto, AuthRegisterRequestDto,
AuthResendOtpRequestDto, AuthVerifyEmailRequestDto,
};
use crate::{AppState, v1::AuthLoginResponsetDto};
use crate::{AppState, v1::auth::AuthLoginResponsetDto};
use crate::{AuthNewPasswordRequestDto, MessageResponseDto, ResponseSuccessDto};
use axum::{Extension, Json, response::IntoResponse};
use crate::v1::auth::auth_service::AuthServiceTrait;
+4 -2
View File
@@ -1,5 +1,7 @@
use std::pin::Pin;
use std::future::Future;
use imphnen_utils as generate_otp;
use imphnen_libs::enviroment;
use super::{
AuthLoginRequestDto, AuthLoginResponsetDto, AuthNewPasswordRequestDto,
AuthRefreshTokenRequestDto, AuthRegisterRequestDto, AuthRepository,
@@ -9,7 +11,7 @@ use crate::{
AppState, ResourceEnum, ResponseSuccessDto, RolesEnum, RolesRepository,
UsersDetailItemDto, UsersRepository, UsersSchema, common_response,
decode_refresh_token, encode_access_token, encode_refresh_token,
encode_reset_password_token, extract_email_token_async, generate_otp, get_iso_date,
encode_reset_password_token, extract_email_token_async, get_iso_date,
hash_password, make_thing, send_email, success_response, validate_request,
verify_password,
};
@@ -475,7 +477,7 @@ impl AuthServiceTrait for AuthService {
}
};
let env = &crate::enviroment::ENV;
let env = &enviroment::ENV;
let fe_url = env.fe_url.clone();
let message = format!(
"You have requested a password reset. Please click the link below to continue: {fe_url}/auth/reset-password?token={token}"
+5 -1
View File
@@ -1,3 +1,7 @@
/// Google OAuth integration module
pub mod google_oauth_controller;
pub mod google_oauth_dto;
pub mod google_oauth_service;
pub mod google_oauth_service;
// Export only essential types and functions from Google OAuth submodules
pub use google_oauth_controller::GoogleOauthController;
+37 -12
View File
@@ -7,20 +7,45 @@ pub mod auth_schema;
pub mod auth_service;
pub mod google;
pub use auth_dto::*;
pub use auth_repository::*;
pub use auth_schema::*;
pub use auth_service::*;
// Export only the essential types and functions from each submodule
pub use auth_dto::{
AuthLoginRequestDto,
AuthLoginResponsetDto,
AuthRegisterRequestDto,
AuthResendOtpRequestDto,
AuthVerifyEmailRequestDto,
AuthNewPasswordRequestDto,
AuthRefreshTokenRequestDto,
TokenDto,
UserCacheSchema,
};
pub use auth_repository::AuthRepository;
pub use imphnen_libs::AuthRepositoryTrait;
pub use auth_schema::AuthOtpSchema;
pub use auth_service::AuthServiceTrait;
// Export controller functions that are used in routing
pub use auth_controller::{
post_login,
post_login_mentor,
post_register,
post_forgot_password,
post_new_password,
post_refresh_token,
post_resend_otp,
post_verify_email
};
pub fn auth_router() -> Router {
Router::new()
.nest("/google", google::google_oauth_controller::GoogleOauthController::new().get_routes())
.route("/forgot", post(auth_controller::post_forgot_password))
.route("/login", post(auth_controller::post_login))
.route("/login-mentor", post(auth_controller::post_login_mentor))
.route("/new-password", post(auth_controller::post_new_password))
.route("/refresh", post(auth_controller::post_refresh_token))
.route("/register", post(auth_controller::post_register))
.route("/send-otp", post(auth_controller::post_resend_otp))
.route("/verify-email", post(auth_controller::post_verify_email))
.route("/forgot", post(post_forgot_password))
.route("/login", post(post_login))
.route("/login-mentor", post(post_login_mentor))
.route("/new-password", post(post_new_password))
.route("/refresh", post(post_refresh_token))
.route("/register", post(post_register))
.route("/send-otp", post(post_resend_otp))
.route("/verify-email", post(post_verify_email))
}
+7 -5
View File
@@ -6,12 +6,14 @@ pub mod roles;
pub mod teams;
pub mod users;
pub use auth::*;
pub use permissions::*;
pub use roles::*;
pub use teams::*;
pub use users::*;
// Export only the essential router functions from each module
pub use auth::auth_router;
pub use permissions::{permissions_router, permissions_dto, permissions_service, permissions_guard};
pub use roles::{roles_router, roles_service};
pub use teams::teams_router;
pub use users::users_router;
// Main route constructors
pub fn iam_public_routes() -> Router {
Router::new().nest("/auth", auth_router())
}
+18 -6
View File
@@ -10,12 +10,24 @@ pub mod permissions_repository;
pub mod permissions_schema;
pub mod permissions_service;
pub use permissions_controller::*;
pub use permissions_dto::*;
pub use permissions_enum::*;
pub use permissions_guard::*;
pub use permissions_repository::*;
pub use permissions_schema::*;
// Export only essential types and functions from each submodule
pub use permissions_controller::{
get_permission_list,
get_permission_by_id,
post_create_permission,
put_update_permission,
delete_permission
};
pub use permissions_dto::{
PermissionsRequestDto,
PermissionsUpdateRequestDto,
};
pub use permissions_enum::PermissionsEnum;
pub use permissions_guard::permissions_guard;
pub use permissions_repository::PermissionsRepository;
pub use permissions_schema::PermissionsSchema;
pub fn permissions_router() -> Router {
Router::new()
+20 -6
View File
@@ -10,12 +10,26 @@ pub mod roles_repository;
pub mod roles_schema;
pub mod roles_service;
pub use roles_controller::*;
pub use roles_dto::*;
pub use roles_enum::*;
pub use roles_repository::*;
pub use roles_schema::*;
pub use roles_service::*;
// Export only essential types and functions from each submodule
pub use roles_controller::{
get_role_list,
get_role_by_id,
post_create_role,
put_update_role,
delete_role
};
pub use roles_dto::{
RolesRequestCreateDto,
RolesRequestUpdateDto,
RolesDetailItemDto,
RolesListItemDto,
RolesDetailQueryDto,
};
pub use roles_enum::RolesEnum;
pub use roles_repository::RolesRepository;
pub use roles_schema::RolesSchema;
pub fn roles_router() -> Router {
Router::new()
+42 -7
View File
@@ -5,15 +5,50 @@ pub mod teams_repository;
pub mod teams_schema;
pub mod teams_service;
pub use admin_teams_controller::{admin_teams_router, get_all_teams as admin_get_all_teams, get_team_by_id as admin_get_team_by_id, get_team_members as admin_get_team_members, create_team as admin_create_team, update_team as admin_update_team, delete_team as admin_delete_team, invite_team_members as admin_invite_team_members};
pub use teams_controller::{teams_router as user_teams_router, get_team_list, get_team_by_id as user_get_team_by_id, get_team_members as user_get_team_members};
pub use teams_dto::*;
pub use teams_repository::*;
pub use teams_schema::*;
pub use teams_service::*;
use axum::Router;
// Export only essential types and functions from each submodule
pub use admin_teams_controller::{
admin_teams_router,
get_all_teams as admin_get_all_teams,
get_team_by_id as admin_get_team_by_id,
get_team_members as admin_get_team_members,
create_team as admin_create_team,
update_team as admin_update_team,
delete_team as admin_delete_team,
invite_team_members as admin_invite_team_members
};
pub use teams_controller::{
teams_router as user_teams_router,
get_team_list,
get_team_by_id as user_get_team_by_id,
get_team_members as user_get_team_members
};
pub use teams_dto::{
TeamsCreateRequestDto,
TeamsUpdateRequestDto,
TeamInviteRequestDto,
TeamMemberDto,
TeamsListItemDto,
TeamsDetailItemDto,
PublicTeamsListItemDto,
PublicTeamsDetailItemDto,
AdminTeamsListItemDto,
AdminTeamsDetailItemDto,
TeamAcceptInvitationRequestDto,
TeamsSearchQueryDto,
TeamsDetailQueryDto,
TeamsListQueryDto,
TeamMembersQueryDto,
TeamInvitationsQueryDto,
MemberTeamsDetailItemDto
};
pub use teams_repository::TeamsRepository;
pub use teams_schema::{TeamsSchema, TeamMembersSchema, TeamInvitationsSchema};
pub fn teams_router() -> Router {
Router::new()
// Public routes
+25 -5
View File
@@ -9,11 +9,31 @@ pub mod users_repository;
pub mod users_schema;
pub mod users_service;
pub use users_controller::*;
pub use users_dto::*;
pub use users_repository::*;
pub use users_schema::*;
pub use users_service::*;
// Export only essential types and functions from each submodule
pub use users_controller::{
get_user_list,
get_user_by_id,
get_user_me,
post_create_user,
put_update_user,
put_update_user_me,
delete_user,
patch_user_active_status,
upload_file
};
pub use users_dto::{
UsersActiveInactiveRequestDto,
UsersCreateRequestDto,
UsersUpdateRequestDto,
UsersSetNewPasswordRequestDto,
UsersDetailItemDto,
UsersListItemDto,
UsersListQueryDto,
};
pub use users_repository::UsersRepository;
pub use users_schema::UsersSchema;
pub fn users_router() -> Router {
Router::new()