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
+47 -4
View File
@@ -1,6 +1,49 @@
pub mod v1;
pub use imphnen_entities::*;
pub use imphnen_libs::*;
pub use imphnen_utils::*;
pub use v1::*;
// Re-export core entity types used across the gacha system
pub use imphnen_entities::{
CountResult,
Error,
ExperienceDto,
EducationDto,
MessageResponseDto,
MetaRequestDto,
MetaResponseDto,
PermissionsEnum,
PermissionsItemDto,
PermissionsQueryDto,
ResponseListSuccessDto,
ResponseSuccessDto,
UsersDetailQueryDto,
};
// Explicitly import only what we need from libs and utils to avoid pollution
pub use imphnen_libs::{
AppState,
MinioService,
};
pub use imphnen_utils::{
bind_filter,
csrf_token,
extract_email,
generate_date,
generate_otp,
get_id,
logger,
make_thing,
mock_test,
query_builder,
query_list,
response_format,
serde_helpers,
validator,
};
// Re-export public v1 API
pub use v1::{
gacha_claim_router,
gacha_item_router,
gacha_roll_router,
gacha_router,
};
@@ -3,9 +3,9 @@ use axum::http::HeaderMap;
use axum::response::IntoResponse;
use axum::{Json, extract::Path};
use imphnen_iam::{PermissionsEnum, permissions_guard};
use imphnen_libs::{AppState, MessageResponseDto, ResponseSuccessDto};
use super::{GachaClaimItemDto, GachaClaimRequestDto, GachaClaimService};
use crate::AppState;
use imphnen_entities::{MessageResponseDto, ResponseSuccessDto};
use crate::v1::gacha_claims::{GachaClaimItemDto, GachaClaimRequestDto, GachaClaimService};
#[utoipa::path(
get,
@@ -1,4 +1,5 @@
use crate::{GachaItemDto, GachaItemSchema};
use crate::v1::gacha_items::GachaItemDto;
use crate::v1::gacha_items::gacha_items_schema::GachaItemSchema;
use imphnen_iam::{UsersDetailItemDto, UsersDetailQueryDto};
use serde::{Deserialize, Serialize};
use surrealdb::sql::Thing;
@@ -1,5 +1,7 @@
use super::{GachaClaimQueryDto, GachaClaimSchema};
use crate::{AppState, ResourceEnum};
use crate::v1::gacha_claims::gacha_claims_dto::GachaClaimQueryDto;
use crate::v1::gacha_claims::gacha_claims_schema::GachaClaimSchema;
use crate::AppState;
use imphnen_libs::ResourceEnum;
use anyhow::{Result, bail};
use imphnen_iam::DetailQueryBuilder;
use std::time::Instant;
@@ -1,9 +1,11 @@
use crate::{GachaRollQueryDto, ResourceEnum, make_thing};
use crate::v1::gacha_rolls::gacha_rolls_dto::GachaRollQueryDto;
use crate::{make_thing};
use imphnen_iam::get_iso_date;
use imphnen_libs::ResourceEnum;
use serde::{Deserialize, Serialize};
use surrealdb::{Uuid, sql::Thing};
use super::GachaClaimRequestDto;
use crate::v1::gacha_claims::gacha_claims_dto::GachaClaimRequestDto;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GachaClaimSchema {
@@ -1,8 +1,9 @@
use crate::{
AppState, GachaClaimItemDto, GachaClaimRepository, GachaClaimRequestDto,
GachaClaimSchema, ResponseSuccessDto, common_response, success_response,
validate_request,
};
use crate::AppState;
use imphnen_entities::ResponseSuccessDto;
use imphnen_utils::{common_response, success_response, validate_request};
use crate::v1::gacha_claims::gacha_claims_dto::{GachaClaimItemDto, GachaClaimRequestDto};
use crate::v1::gacha_claims::gacha_claims_repository::GachaClaimRepository;
use crate::v1::gacha_claims::gacha_claims_schema::GachaClaimSchema;
use axum::http::StatusCode;
use axum::response::Response;
+10 -10
View File
@@ -1,6 +1,6 @@
use axum::{
Router,
routing::{get, post},
Router,
routing::{get, post},
};
pub mod gacha_claims_controller;
@@ -9,14 +9,14 @@ pub mod gacha_claims_repository;
pub mod gacha_claims_schema;
pub mod gacha_claims_service;
pub use gacha_claims_controller::*;
pub use gacha_claims_dto::*;
pub use gacha_claims_repository::*;
pub use gacha_claims_schema::*;
pub use gacha_claims_service::*;
// Export only public API functions
pub use gacha_claims_controller::{post_create_gacha_claim, get_detail_gacha_claim};
pub use gacha_claims_dto::{GachaClaimItemDto, GachaClaimRequestDto};
pub use gacha_claims_service::GachaClaimService;
/// Creates router for gacha claims endpoints
pub fn gacha_claim_router() -> Router {
Router::new()
.route("/create", post(post_create_gacha_claim))
.route("/detail/{id}", get(get_detail_gacha_claim))
Router::new()
.route("/create", post(post_create_gacha_claim))
.route("/detail/{id}", get(get_detail_gacha_claim))
}
@@ -1,5 +1,7 @@
use super::{GachaCreditRequestDto, GachaCreditSchema};
use crate::{AppState, ResourceEnum};
use crate::v1::gacha_credits::gacha_credits_dto::GachaCreditRequestDto;
use crate::v1::gacha_credits::gacha_credits_schema::GachaCreditSchema;
use crate::AppState;
use imphnen_libs::ResourceEnum;
use anyhow::{Result, bail};
use imphnen_iam::make_thing;
use std::time::Instant;
+2 -3
View File
@@ -2,6 +2,5 @@ pub mod gacha_credits_dto;
pub mod gacha_credits_repository;
pub mod gacha_credits_schema;
pub use gacha_credits_dto::*;
pub use gacha_credits_repository::*;
pub use gacha_credits_schema::*;
// Export only public types and functions
pub use gacha_credits_dto::GachaCreditRequestDto;
@@ -1,7 +1,8 @@
use crate::{
AppState, GachaItemDto, GachaItemRequestDto, GachaItemUpdateRequestDto, GachaItemService, MessageResponseDto,
MetaRequestDto, ResponseListSuccessDto, ResponseSuccessDto,
};
use crate::{AppState, MetaRequestDto, ResponseListSuccessDto, ResponseSuccessDto};
use imphnen_entities::MessageResponseDto;
use crate::v1::gacha_items::GachaItemDto;
use crate::v1::gacha_items::gacha_items_dto::{GachaItemRequestDto, GachaItemUpdateRequestDto};
use crate::v1::gacha_items::gacha_items_service::GachaItemService;
use axum::{
Extension, Json,
extract::{Path, Query},
@@ -1,4 +1,4 @@
use super::GachaItemSchema;
use crate::v1::gacha_items::gacha_items_schema::GachaItemSchema;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use validator::Validate;
@@ -1,8 +1,7 @@
use super::GachaItemSchema;
use crate::{
AppState, GachaItemDto, MetaRequestDto, ResourceEnum, ResponseListSuccessDto,
get_id, make_thing,
};
use crate::v1::gacha_items::gacha_items_schema::GachaItemSchema;
use crate::{AppState, MetaRequestDto, ResponseListSuccessDto, get_id, make_thing};
use crate::v1::gacha_items::GachaItemDto;
use imphnen_libs::ResourceEnum;
use anyhow::{Result, bail};
use imphnen_iam::QueryListBuilder;
use imphnen_utils::get_iso_date;
@@ -1,9 +1,10 @@
use crate::{ResourceEnum, make_thing};
use crate::make_thing;
use imphnen_iam::get_iso_date;
use imphnen_libs::ResourceEnum;
use serde::{Deserialize, Serialize};
use surrealdb::{Uuid, sql::Thing};
use super::GachaItemRequestDto;
use crate::v1::gacha_items::gacha_items_dto::GachaItemRequestDto;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GachaItemSchema {
@@ -1,9 +1,11 @@
use crate::{
AppState, GachaItemDto, GachaItemRepository, GachaItemRequestDto, GachaItemUpdateRequestDto, GachaItemSchema,
MetaRequestDto, ResourceEnum, ResponseListSuccessDto, ResponseSuccessDto,
common_response, make_thing, success_list_response, success_response,
validate_request,
};
use crate::AppState;
use imphnen_entities::{MetaRequestDto, ResponseListSuccessDto, ResponseSuccessDto};
use imphnen_utils::{common_response, make_thing, success_list_response, success_response, validate_request};
use crate::v1::gacha_items::GachaItemDto;
use crate::v1::gacha_items::gacha_items_dto::{GachaItemRequestDto, GachaItemUpdateRequestDto};
use crate::v1::gacha_items::gacha_items_repository::GachaItemRepository;
use crate::v1::gacha_items::gacha_items_schema::GachaItemSchema;
use imphnen_libs::ResourceEnum;
use axum::http::StatusCode;
use axum::response::Response;
use imphnen_utils::get_iso_date;
+18 -13
View File
@@ -1,6 +1,6 @@
use axum::{
Router,
routing::{delete, get, post, put},
Router,
routing::{delete, get, post, put},
};
pub mod gacha_items_controller;
@@ -9,17 +9,22 @@ pub mod gacha_items_repository;
pub mod gacha_items_schema;
pub mod gacha_items_service;
pub use gacha_items_controller::*;
pub use gacha_items_dto::*;
pub use gacha_items_repository::*;
pub use gacha_items_schema::*;
pub use gacha_items_service::*;
// Export only public API functions and types
pub use gacha_items_controller::{
get_gacha_item_list,
post_create_gacha_item,
get_gacha_item_by_id,
put_update_gacha_item,
delete_gacha_item,
};
pub use gacha_items_dto::GachaItemDto;
/// Creates router for gacha items endpoints
pub fn gacha_item_router() -> Router {
Router::new()
.route("/", get(get_gacha_item_list))
.route("/create", post(post_create_gacha_item))
.route("/detail/{id}", get(get_gacha_item_by_id))
.route("/update/{id}", put(put_update_gacha_item))
.route("/delete/{id}", delete(delete_gacha_item))
Router::new()
.route("/", get(get_gacha_item_list))
.route("/create", post(post_create_gacha_item))
.route("/detail/{id}", get(get_gacha_item_by_id))
.route("/update/{id}", put(put_update_gacha_item))
.route("/delete/{id}", delete(delete_gacha_item))
}
@@ -1,7 +1,7 @@
use crate::{
AppState, GachaRollItemDto, GachaRollRequestDto, GachaRollService,
MessageResponseDto, ResponseSuccessDto,
};
use crate::AppState;
use imphnen_entities::{MessageResponseDto, ResponseSuccessDto};
use crate::v1::gacha_rolls::gacha_rolls_dto::{GachaRollItemDto, GachaRollRequestDto};
use crate::v1::gacha_rolls::gacha_rolls_service::GachaRollService;
use axum::{
Extension, Json, extract::Path, http::HeaderMap, response::IntoResponse,
};
@@ -1,4 +1,5 @@
use crate::{GachaItemDto, GachaItemSchema};
use crate::v1::gacha_items::GachaItemDto;
use crate::v1::gacha_items::gacha_items_schema::GachaItemSchema;
use serde::{Deserialize, Serialize};
use surrealdb::sql::Thing;
use utoipa::ToSchema;
@@ -1,6 +1,9 @@
use super::GachaRollQueryDto;
use super::GachaRollSchema;
use crate::{AppState, DetailQueryBuilder, ResourceEnum, get_id, make_thing};
use crate::v1::gacha_rolls::gacha_rolls_dto::GachaRollQueryDto;
use crate::v1::gacha_rolls::gacha_rolls_schema::GachaRollSchema;
use crate::AppState;
use imphnen_libs::ResourceEnum;
use imphnen_utils::DetailQueryBuilder;
use crate::{get_id, make_thing};
use anyhow::{Result, bail};
use rand::prelude::*;
@@ -1,9 +1,10 @@
use crate::{ResourceEnum, make_thing};
use crate::make_thing;
use imphnen_iam::get_iso_date;
use imphnen_libs::ResourceEnum;
use serde::{Deserialize, Serialize};
use surrealdb::{Uuid, sql::Thing};
use super::GachaRollRequestDto;
use crate::v1::gacha_rolls::gacha_rolls_dto::GachaRollRequestDto;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct GachaRollSchema {
@@ -1,11 +1,15 @@
use crate::{
AppState, GachaClaimRepository, GachaClaimSchema, GachaRollItemDto,
GachaRollRepository, GachaRollRequestDto, GachaRollSchema, ResponseSuccessDto,
common_response, success_response, validate_request,
};
use crate::AppState;
use imphnen_entities::ResponseSuccessDto;
use imphnen_utils::{common_response, success_response, validate_request};
use crate::v1::gacha_claims::gacha_claims_repository::GachaClaimRepository;
use crate::v1::gacha_claims::gacha_claims_schema::GachaClaimSchema;
use crate::v1::gacha_rolls::gacha_rolls_dto::{GachaRollItemDto, GachaRollRequestDto};
use crate::v1::gacha_rolls::gacha_rolls_repository::GachaRollRepository;
use crate::v1::gacha_rolls::gacha_rolls_schema::GachaRollSchema;
use axum::http::{HeaderMap, StatusCode};
use axum::response::Response;
use imphnen_iam::{UsersRepository, extract_email};
use imphnen_iam::UsersRepository;
use imphnen_utils::extract_email;
pub struct GachaRollService;
+16 -12
View File
@@ -1,22 +1,26 @@
use axum::{
Router,
routing::{get, post},
};
pub mod gacha_rolls_controller;
pub mod gacha_rolls_dto;
pub mod gacha_rolls_repository;
pub mod gacha_rolls_schema;
pub mod gacha_rolls_service;
use axum::{
Router,
routing::{get, post},
// Export only public API functions and types
pub use gacha_rolls_controller::{
post_create_gacha_roll,
post_execute_gacha_roll,
get_detail_gacha_roll,
};
pub use gacha_rolls_controller::*;
pub use gacha_rolls_dto::*;
pub use gacha_rolls_repository::*;
pub use gacha_rolls_schema::*;
pub use gacha_rolls_service::*;
pub use gacha_rolls_dto::GachaRollItemDto;
/// Creates router for gacha rolls endpoints
pub fn gacha_roll_router() -> Router {
Router::new()
.route("/create", post(post_create_gacha_roll))
.route("/execute", post(post_execute_gacha_roll))
.route("/detail/{id}", get(get_detail_gacha_roll))
Router::new()
.route("/create", post(post_create_gacha_roll))
.route("/execute", post(post_execute_gacha_roll))
.route("/detail/{id}", get(get_detail_gacha_roll))
}
+10 -8
View File
@@ -5,14 +5,16 @@ pub mod gacha_credits;
pub mod gacha_items;
pub mod gacha_rolls;
pub use gacha_claims::*;
pub use gacha_credits::*;
pub use gacha_items::*;
pub use gacha_rolls::*;
// Export only public router functions to avoid namespace pollution
pub use gacha_claims::gacha_claim_router;
pub use gacha_credits::*; // gacha_credits doesn't have router functions
pub use gacha_items::gacha_item_router;
pub use gacha_rolls::gacha_roll_router;
/// Creates the main gacha router with all version 1 endpoints
pub fn gacha_router() -> Router {
Router::new()
.nest("/gacha/claims", gacha_claim_router())
.nest("/gacha/items", gacha_item_router())
.nest("/gacha/rolls", gacha_roll_router())
Router::new()
.nest("/claims", gacha_claim_router())
.nest("/items", gacha_item_router())
.nest("/rolls", gacha_roll_router())
}