"""Global admin-controlled app state (e.g. pausing background sync).""" import logging from sqlalchemy.orm import Session from app.config import settings from app.models import AppState log = logging.getLogger("subfeed.state") # Bounds for the admin-set maintenance re-validation batch (videos re-checked per run). MAINTENANCE_BATCH_MIN = 100 MAINTENANCE_BATCH_MAX = 100_000 def _row(db: Session) -> AppState: row = db.get(AppState, 1) if row is None: row = AppState(id=1, sync_paused=False) db.add(row) db.commit() return row def is_sync_paused(db: Session) -> bool: return _row(db).sync_paused def set_sync_paused(db: Session, paused: bool) -> None: row = _row(db) row.sync_paused = paused db.add(row) db.commit() log.info("Background sync %s", "paused" if paused else "resumed") def get_maintenance_batch(db: Session) -> int: """Effective maintenance re-validation batch: the admin override if set, else the env/config default.""" return _row(db).maintenance_revalidate_batch or settings.maintenance_revalidate_batch def set_maintenance_batch(db: Session, value: int) -> int: """Clamp and persist the maintenance batch override. Returns the applied value.""" value = max(MAINTENANCE_BATCH_MIN, min(MAINTENANCE_BATCH_MAX, int(value))) row = _row(db) row.maintenance_revalidate_batch = value db.add(row) db.commit() log.info("Maintenance re-validation batch set to %s", value) return value