feat: add module prefixes to all routes and load all modules in swagger

Route structure:
  /v1/iam/auth/*         (was /v1/auth/*)
  /v1/iam/users/*        (was /v1/users/*)
  /v1/iam/roles/*        (was /v1/roles/*)
  /v1/iam/permissions/*  (was /v1/permissions/*)
  /v1/landing/cms/events/*        (was /v1/cms/landing/events/*)
  /v1/landing/cms/testimonials/*  (was /v1/cms/landing/testimonials/*)
  /v1/dimentorin/mentors/*   (was /v1/mentors/*)
  /v1/dimentorin/sessions/*  (was /v1/sessions/*)
  /v1/gacha/*            (unchanged)
  /v1/hackathon/*        (unchanged)
  /v1/qr/*               (unchanged)

Swagger: add gacha_credits endpoints which were missing from OpenAPI spec.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
maulanasdqn
2026-04-03 00:26:29 +07:00
co-authored by Claude Sonnet 4.6
parent c38b718eb4
commit 76201d8d3e
17 changed files with 115 additions and 97 deletions
+19 -11
View File
@@ -29,6 +29,10 @@ use imphnen_gacha::gacha_claims::infrastructure::http::dto::{
GachaClaimCreateRequestDto, GachaClaimDetailDto,
};
use imphnen_gacha::gacha_claims::infrastructure::http::handlers as gacha_claims_controller;
use imphnen_gacha::gacha_credits::infrastructure::http::dto::{
GachaCreditAddRequestDto, GachaCreditDto,
};
use imphnen_gacha::gacha_credits::infrastructure::http::handlers as gacha_credits_controller;
use imphnen_gacha::gacha_items::infrastructure::http::dto::{
GachaItemCreateRequestDto, GachaItemDto,
};
@@ -77,6 +81,8 @@ use utoipa::OpenApi;
permissions_controller::post_create_permission, permissions_controller::put_update_permission,
permissions_controller::delete_permission,
gacha_claims_controller::get_gacha_claim_by_id, gacha_claims_controller::post_create_gacha_claim,
gacha_credits_controller::get_user_credits, gacha_credits_controller::post_add_credits,
gacha_credits_controller::post_consume_credit,
gacha_items_controller::get_gacha_item_list, gacha_items_controller::get_gacha_item_by_id,
gacha_items_controller::post_create_gacha_item, gacha_items_controller::put_update_gacha_item,
gacha_items_controller::delete_gacha_item,
@@ -104,7 +110,9 @@ use utoipa::OpenApi;
RolesListItemDto, RolesDetailItemDto, RolesCreateRequestDto, RolesUpdateRequestDto,
PermissionsCreateRequestDto, PermissionsItemDto,
UsersDetailItemDto, UsersListItemDto, UsersUpdateRequestDto, UsersCreateRequestDto, FileUploadSchema,
GachaClaimDetailDto, GachaClaimCreateRequestDto, GachaItemDto, GachaItemCreateRequestDto,
GachaClaimDetailDto, GachaClaimCreateRequestDto,
GachaCreditDto, GachaCreditAddRequestDto,
GachaItemDto, GachaItemCreateRequestDto,
GachaRollItemDto, GachaRollCreateRequestDto,
ResponseListSuccessDto<Vec<GachaItemDto>>, ResponseSuccessDto<GachaRollItemDto>,
ResponseSuccessDto<GachaItemDto>, ResponseSuccessDto<GachaClaimDetailDto>,
@@ -137,16 +145,16 @@ use utoipa::OpenApi;
),
modifiers(&SecurityAddon),
tags(
(name = "Authentication", description = "List of Authentication Endpoints"),
(name = "Users", description = "User Management Endpoints"),
(name = "Roles", description = "Role Management Endpoints"),
(name = "Permissions", description = "Permission Management Endpoints"),
(name = "Events", description = "Event Management Endpoints"),
(name = "Testimonials", description = "Testimonial Management Endpoints"),
(name = "Mentors", description = "Mentor Management Endpoints"),
(name = "Mentors - Admin", description = "Mentor Admin Management Endpoints (Admin Access Required)"),
(name = "sessions", description = "Mentoring Sessions Management API"),
(name = "Gacha", description = "Gacha System Endpoints"),
(name = "Authentication", description = "IAM — Auth endpoints (/v1/iam/auth)"),
(name = "Users", description = "IAM — User management (/v1/iam/users)"),
(name = "Roles", description = "IAM — Role management (/v1/iam/roles)"),
(name = "Permissions", description = "IAM — Permission management (/v1/iam/permissions)"),
(name = "Events", description = "Landing CMS — Event management (/v1/landing/cms/events)"),
(name = "Testimonials", description = "Landing CMS — Testimonial management (/v1/landing/cms/testimonials)"),
(name = "Mentors", description = "Dimentorin — Mentor management (/v1/dimentorin/mentors)"),
(name = "Mentors - Admin", description = "Dimentorin — Mentor admin endpoints (/v1/dimentorin/mentors)"),
(name = "sessions", description = "Dimentorin Session management (/v1/dimentorin/sessions)"),
(name = "Gacha", description = "Gacha system (/v1/gacha)"),
)
)]
pub struct ApiDoc;
+33 -23
View File
@@ -45,40 +45,50 @@ pub async fn gateway_service(postgres_clients: PostgresClients) -> Router {
.await
.expect("Failed to create MinIO service"),
);
let public_routes = Router::new()
let iam_routes = Router::new()
.merge(
auth_public_routes(db.clone(), Arc::clone(&state_arc))
.layer(from_fn(rate_limiting_middleware)),
)
.merge(
Router::new()
.merge(users_protected_routes(db.clone(), Arc::clone(&state_arc)))
.merge(roles_protected_routes(db.clone(), Arc::clone(&state_arc)))
.merge(permissions_protected_routes(db.clone(), Arc::clone(&state_arc)))
.layer(from_fn(auth_middleware)),
);
let cms_routes = Router::new()
.merge(testimonials_public_routes(db.clone()))
.merge(events_public_routes(db.clone()))
.merge(mentors_public_routes(db.clone(), Arc::clone(&state_arc)))
.merge(sessions_public_routes(db.clone()));
.merge(
Router::new()
.merge(events_protected_routes(db.clone()))
.merge(testimonials_protected_routes(db.clone()))
.layer(from_fn(auth_middleware)),
);
let protected_routes = Router::new()
.merge(users_protected_routes(db.clone(), Arc::clone(&state_arc)))
.merge(roles_protected_routes(db.clone(), Arc::clone(&state_arc)))
.merge(permissions_protected_routes(
db.clone(),
Arc::clone(&state_arc),
))
.merge(events_protected_routes(db.clone()))
.merge(testimonials_protected_routes(db.clone()))
.merge(mentors_protected_routes(db.clone(), Arc::clone(&state_arc)))
.merge(sessions_protected_routes(
db.clone(),
Arc::clone(&state_arc),
))
.nest("/gacha", gacha_router(db.clone(), Arc::clone(&state_arc)))
let dimentorin_routes = Router::new()
.merge(mentors_public_routes(db.clone(), Arc::clone(&state_arc)))
.merge(sessions_public_routes(db.clone()))
.merge(
Router::new()
.merge(mentors_protected_routes(db.clone(), Arc::clone(&state_arc)))
.merge(sessions_protected_routes(db.clone(), Arc::clone(&state_arc)))
.layer(from_fn(auth_middleware)),
);
let gacha_routes = gacha_router(db.clone(), Arc::clone(&state_arc))
.layer(from_fn(auth_middleware));
Router::new()
.route("/", get(Redirect::to("/docs")))
.nest("/v1", public_routes.merge(protected_routes))
.nest(
"/v1/hackathon",
hackathon_router(db.clone(), minio),
)
.nest("/v1/iam", iam_routes)
.nest("/v1/landing/cms", cms_routes)
.nest("/v1/dimentorin", dimentorin_routes)
.nest("/v1/gacha", gacha_routes)
.nest("/v1/hackathon", hackathon_router(db.clone(), minio))
.nest("/v1/qr", qr_router(db.clone()))
.merge(SwaggerUi::new("/docs").url("/openapi.json", docs_router()))
.layer(cors_middleware())