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
+18 -19
View File
@@ -41,28 +41,27 @@ pub async fn auth_middleware(
// Try SurrealDB mem first
let mem_db = &state.surrealdb_mem;
let mut user_data: Option<UsersDetailQueryDto> = None;
if let Ok(opt_user) = mem_db.select(("users", &user_id)).await {
if let Some(user) = opt_user {
let user: UsersDetailQueryDto = user;
if !user.is_deleted && !user.role.is_deleted {
user_data = Some(user);
}
let user_data = if let Ok(Some(user)) = mem_db.select::<Option<UsersDetailQueryDto>>(("users", &user_id)).await {
if !user.is_deleted && !user.role.is_deleted {
Some(user)
} else {
None
}
}
} else {
None
};
// Fallback to main DB if not found in mem
let user_data = match user_data {
Some(user) => user,
None => {
match state.user_lookup_service.get_user_by_id_internal(&thing_id, &state).await {
Ok(user) => {
// Optionally: insert into mem for future requests
let _: Result<Option<UsersDetailQueryDto>, _> = mem_db.update(("users", &user_id)).content(user.clone()).await;
user
},
Err(_) => return Ok(common_response(StatusCode::UNAUTHORIZED, "User not found")),
}
let user_data = if let Some(user) = user_data {
user
} else {
match state.user_lookup_service.get_user_by_id_internal(&thing_id, &state).await {
Ok(user) => {
// Cache in mem for future requests
let _: Result<Option<UsersDetailQueryDto>, _> = mem_db.update(("users", &user_id)).content(user.clone()).await;
user
},
Err(_) => return Ok(common_response(StatusCode::UNAUTHORIZED, "User not found")),
}
};