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:
+91
-4
@@ -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};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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;
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user