brewman/brewman/brewman/routers/maintenance.py

57 lines
1.6 KiB
Python

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}