Adds complete super_admin panel with 9 pages and account owner categories page. Backend includes 5 new DB tables, ~25 API endpoints, settings manager with in-memory cache, and 29 integration tests. Frontend includes reusable admin components (DataTable, Pagination, ActionMenu, etc.) with code-split lazy loading. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from typing import Annotated
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.database import get_db
|
|
from app.core.audit import log_audit
|
|
from app.core.settings_manager import SettingsManager
|
|
from app.models.user import User
|
|
from app.schemas.admin import SettingsResponse, SettingsUpdate
|
|
from app.api.deps import require_admin
|
|
|
|
router = APIRouter(prefix="/admin/settings", tags=["admin-settings"])
|
|
|
|
|
|
@router.get("", response_model=SettingsResponse)
|
|
async def list_settings(
|
|
db: Annotated[AsyncSession, Depends(get_db)],
|
|
current_user: Annotated[User, Depends(require_admin)],
|
|
):
|
|
"""List all platform settings."""
|
|
settings = await SettingsManager.get_all(db, include_sensitive=True)
|
|
return SettingsResponse(settings=settings)
|
|
|
|
|
|
@router.put("", response_model=SettingsResponse)
|
|
async def update_settings(
|
|
data: SettingsUpdate,
|
|
db: Annotated[AsyncSession, Depends(get_db)],
|
|
current_user: Annotated[User, Depends(require_admin)],
|
|
):
|
|
"""Update platform settings (batch)."""
|
|
for key, value in data.settings.items():
|
|
await SettingsManager.set(key, value, db, current_user.id)
|
|
|
|
await log_audit(db, current_user.id, "settings.update", "platform_settings",
|
|
details={"keys": list(data.settings.keys())})
|
|
await db.commit()
|
|
|
|
settings = await SettingsManager.get_all(db, include_sensitive=True)
|
|
return SettingsResponse(settings=settings)
|