- users.py: list_users, create_user, update_user_status, initiate_password_reset, update_ai_config, delete_user, create_system_topic (7 routes) - quotas.py: get_user_quota, update_user_quota (2 routes) - ai.py: get_ai_config_models, test_ai_connection, get_ai_config, update_system_ai_config (4 routes); validate_provider_id call-through (D-11) - shared.py: _user_to_dict helper (T-02-27 / SEC-07 field whitelist) - __init__.py: router aggregator with prefix=/api/admin; 13 routes total - admin.py monolith renamed to admin_OLD_REMOVE_IN_TASK_3.py (deleted in task 3) - All sub-routers have NO prefix (D-04) - All handlers inject Depends(get_current_admin) (T-08-04-01)
24 lines
903 B
Python
24 lines
903 B
Python
"""Admin API package — router aggregator.
|
|
|
|
This file does ONLY router aggregation (Pitfall 2 prevention — T-08-04-04).
|
|
No helpers, no models, no logic belong here.
|
|
|
|
The prefix="/api/admin" is carried here so sub-routers have NO prefix (D-04):
|
|
users_router = APIRouter() -> /api/admin/users via parent
|
|
quotas_router = APIRouter() -> /api/admin/users/{id}/quota via parent
|
|
ai_router = APIRouter() -> /api/admin/ai-config via parent
|
|
|
|
main.py continues to use:
|
|
from api.admin import router as admin_router
|
|
app.include_router(admin_router)
|
|
"""
|
|
from fastapi import APIRouter
|
|
from api.admin.users import router as users_router
|
|
from api.admin.quotas import router as quotas_router
|
|
from api.admin.ai import router as ai_router
|
|
|
|
router = APIRouter(prefix="/api/admin", tags=["admin"])
|
|
router.include_router(users_router)
|
|
router.include_router(quotas_router)
|
|
router.include_router(ai_router)
|