53 lines
2.3 KiB
Python
53 lines
2.3 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from app.core.database import get_db
|
|
from app.api.deps import require_admin
|
|
from app.models.models import User
|
|
from app.schemas.schemas import SystemSettingsResponse, SystemSettingsUpdate
|
|
from app.services.settings_service import get_all_settings, update_settings_service
|
|
|
|
router = APIRouter(prefix="/settings", tags=["System Settings"])
|
|
|
|
@router.get("", response_model=SystemSettingsResponse)
|
|
async def get_settings(
|
|
db: AsyncSession = Depends(get_db),
|
|
admin_user: User = Depends(require_admin)
|
|
):
|
|
"""Retrieve global system settings."""
|
|
settings_dict = await get_all_settings(db)
|
|
return {
|
|
"storage_root": settings_dict.get("storage_root", ""),
|
|
"global_quota_gb": int(settings_dict.get("global_quota_gb", 1000)),
|
|
"default_client_quota_gb": int(settings_dict.get("default_client_quota_gb", 100)),
|
|
"default_keep_daily": int(settings_dict.get("default_keep_daily", 7)),
|
|
"default_keep_weekly": int(settings_dict.get("default_keep_weekly", 4)),
|
|
"default_keep_monthly": int(settings_dict.get("default_keep_monthly", 12)),
|
|
}
|
|
|
|
@router.put("", response_model=SystemSettingsResponse)
|
|
async def update_settings(
|
|
payload: SystemSettingsUpdate,
|
|
db: AsyncSession = Depends(get_db),
|
|
admin_user: User = Depends(require_admin)
|
|
):
|
|
"""Update global system settings."""
|
|
# Convert Pydantic model to a dict of values (filtering out None)
|
|
updates = {k: v for k, v in payload.model_dump().items() if v is not None}
|
|
|
|
try:
|
|
settings_dict = await update_settings_service(db, updates)
|
|
except ValueError as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=str(e)
|
|
)
|
|
|
|
return {
|
|
"storage_root": settings_dict.get("storage_root", ""),
|
|
"global_quota_gb": int(settings_dict.get("global_quota_gb", 1000)),
|
|
"default_client_quota_gb": int(settings_dict.get("default_client_quota_gb", 100)),
|
|
"default_keep_daily": int(settings_dict.get("default_keep_daily", 7)),
|
|
"default_keep_weekly": int(settings_dict.get("default_keep_weekly", 4)),
|
|
"default_keep_monthly": int(settings_dict.get("default_keep_monthly", 12)),
|
|
}
|