from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from ... import models, schemas, auth from ...database import get_db from ...scheduler import sync_scheduler_config router = APIRouter( prefix="/admin/db", tags=["Admin Configuration"] ) @router.get("/settings", response_model=schemas.DbSettingsUpdate) def get_db_settings( db: Session = Depends(get_db), current_admin: auth.TokenData = Depends(auth.get_current_admin) ): """Get database retention and scheduling settings.""" retention = db.query(models.SystemSetting).filter(models.SystemSetting.key == "backup_retention_count").first() hour = db.query(models.SystemSetting).filter(models.SystemSetting.key == "backup_schedule_hour").first() freq = db.query(models.SystemSetting).filter(models.SystemSetting.key == "backup_schedule_freq_days").first() return { "retention_count": int(retention.value) if retention else 10, "schedule_hour": int(hour.value) if hour else 3, "schedule_freq_days": int(freq.value) if freq else 1 } @router.patch("/settings", response_model=schemas.DbSettingsUpdate) def update_db_settings( settings: schemas.DbSettingsUpdate, db: Session = Depends(get_db), current_admin: auth.TokenData = Depends(auth.get_current_admin) ): """Update database settings and re-trigger scheduler sync.""" pairs = { "backup_retention_count": str(settings.retention_count), "backup_schedule_hour": str(settings.schedule_hour), "backup_schedule_freq_days": str(settings.schedule_freq_days) } for key, val in pairs.items(): existing = db.query(models.SystemSetting).filter(models.SystemSetting.key == key).first() if existing: existing.value = val else: db.add(models.SystemSetting(key=key, value=val)) db.commit() sync_scheduler_config() return settings