from fastapi import APIRouter, Depends, Security from sqlalchemy.orm import Session from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models import User from ..models.master import DbSetting from ..schemas.auth import UserToken from ..schemas.settings import Maintenance router = APIRouter() # Dependency def get_db() -> Session: try: db = SessionLocal() yield db finally: db.close() @router.get("", response_model=Maintenance) def get_maintenance( db: Session = Depends(get_db), user: UserToken = Security(get_user), ): data = db.query(DbSetting).filter(DbSetting.name == "Maintenance").first() return info(data, db) @router.post("", response_model=Maintenance) def set_maintenance( data: Maintenance, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["maintenance"]), ): maintenance = db.query(DbSetting).filter(DbSetting.name == "Maintenance").first() if data.enabled is False and maintenance is not None: db.delete(maintenance) maintenance = None elif data.enabled is True and maintenance is None: maintenance = DbSetting(name="Maintenance", data=user.id_) db.add(maintenance) elif data.enabled is True and maintenance.data != user.id_: maintenance.data = user.id_ db.commit() return info(maintenance, db) def info(data, db: Session): if data is None: return {"enabled": False, "user": ""} user = db.query(User).filter(User.id == data.data).one() return {"enabled": True, "user": user.name}