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