import uuid from typing import Optional from fastapi import APIRouter, HTTPException, status, Depends, Security from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.orm import Session from ..schemas.auth import UserToken import barker.schemas.master as schemas from ..core.security import get_current_active_user as get_user from ..db.session import SessionLocal from ..models.master import Modifier router = APIRouter() # Dependency def get_db(): try: db = SessionLocal() yield db finally: db.close() @router.post("", response_model=schemas.Modifier) def save( data: schemas.ModifierIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: item = Modifier( name=data.name, show_in_bill=data.show_in_bill, price=data.price, modifier_category_id=data.modifier_category.id_, is_active=data.is_active, ) db.add(item) db.commit() return modifier_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), ) except Exception: db.rollback() raise @router.put("/{id_}", response_model=schemas.Modifier) def update( id_: uuid.UUID, data: schemas.ModifierIn, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() item.name = data.name item.show_in_bill = data.show_in_bill item.price = data.price item.modifier_category_id = data.modifier_category.id_ item.is_active = data.is_active db.commit() return modifier_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), ) except Exception: db.rollback() raise @router.delete("/{id_}") def delete( id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), ): try: item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() db.delete(item) db.commit() return modifier_info(item) except SQLAlchemyError as e: db.rollback() raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e), ) except Exception: db.rollback() raise @router.get("") def show_blank( db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), ): return modifier_info(None) @router.get("/list") def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)): return [modifier_info(item) for item in db.query(Modifier).order_by(Modifier.name).all()] @router.get("/{id_}") def show_id( id_: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Security(get_user, scopes=["modifiers"]), ): item: Modifier = db.query(Modifier).filter(Modifier.id == id_).first() return modifier_info(item) def modifier_info(item: Optional[Modifier]): if item is None: return { "name": "", "showInBill": False, "price": 0, "isActive": True, "modifierCategory": {}, } return { "id": item.id, "name": item.name, "showInBill": item.show_in_bill, "price": item.price, "isActive": item.is_active, "modifierCategory": {"id": item.modifier_category.id, "name": item.modifier_category.name,}, }