brewman/brewman/brewman/routers/lock_information.py

104 lines
3.0 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.master import DbSetting
from ..schemas.auth import UserToken
from ..schemas.settings import LockInformation
router = APIRouter()
# Dependency
def get_db() -> Session:
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.post("", response_model=LockInformation)
def post(
data_in: LockInformation,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["lock-date"]),
):
data = {
"Start": {"Locked": data_in.lock_older},
"Finish": {"Locked": data_in.lock_newer},
}
if data_in.lock_older:
data["Start"]["Rolling"] = data_in.older_rolling
if data_in.older_rolling:
data["Start"]["Days"] = data_in.older_days
else:
data["Start"]["Date"] = data_in.older_date
if data_in.lock_newer:
data["Finish"]["Rolling"] = data_in.newer_rolling
if data_in.newer_rolling:
data["Finish"]["Days"] = data_in.newer_days
else:
data["Finish"]["Date"] = data_in.newer_date
lock_date = db.query(DbSetting).filter(DbSetting.name == "Lock Info").first()
if lock_date is not None:
lock_date.data = data
else:
lock_date = DbSetting(name="Lock Info", data=data)
db.add(lock_date)
db.commit()
return get_info(data)
@router.delete("")
def delete(
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["lock-date"]),
):
lock_date = db.query(DbSetting).filter(DbSetting.name == "Lock Info").first()
if lock_date is not None and lock_date.data is not None:
lock_date.data = None
db.commit()
return get_info({})
@router.get("")
def get(
db: Session = Depends(get_db),
user: UserToken = Security(get_user),
):
data = db.query(DbSetting).filter(DbSetting.name == "Lock Info").first()
if data is None:
return get_info({})
else:
return get_info(data.data)
def get_info(data):
info = {}
if "Start" not in data:
info["lockOlder"] = False
else:
info["lockOlder"] = data["Start"]["Locked"]
if data["Start"]["Locked"]:
info["olderRolling"] = data["Start"]["Rolling"]
if data["Start"]["Rolling"]:
info["olderDays"] = data["Start"]["Days"]
else:
info["olderDate"] = data["Start"]["Date"].strftime("%d-%b-%Y")
if "Finish" not in data:
info["lockNewer"] = False
else:
info["lockNewer"] = data["Finish"]["Locked"]
if data["Finish"]["Locked"]:
info["newerRolling"] = data["Finish"]["Rolling"]
if data["Finish"]["Rolling"]:
info["newerDays"] = data["Finish"]["Days"]
else:
info["newerDate"] = data["Finish"]["Date"].strftime("%d-%b-%Y")
return info