luthor/luthor/luthor/routers/case_type.py

125 lines
3.3 KiB
Python

import uuid
from typing import List
import luthor.schemas.case_type as schemas
from fastapi import APIRouter, Depends, HTTPException, Security, status
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.case_type import CaseType
from ..schemas.user_token import UserToken
router = APIRouter()
# Dependency
def get_db():
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.post("", response_model=schemas.CaseType)
def save(
data: schemas.CaseTypeIn,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["case-types"]),
) -> schemas.CaseType:
try:
item = CaseType(name=data.name)
db.add(item)
db.commit()
return case_type_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.CaseType)
def update(
id_: uuid.UUID,
data: schemas.CaseTypeIn,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["case-types"]),
) -> schemas.CaseType:
try:
item: CaseType = db.query(CaseType).filter(CaseType.id == id_).first()
item.name = data.name
db.commit()
return case_type_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_}", response_model=schemas.CaseTypeBlank)
def delete(
id_: uuid.UUID,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["case-types"]),
) -> schemas.CaseTypeBlank:
try:
item: CaseType = db.query(CaseType).filter(CaseType.id == id_).first()
db.delete(item)
db.commit()
return case_type_blank()
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("", response_model=schemas.CaseTypeBlank)
def show_blank(
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["case-types"]),
) -> schemas.CaseTypeBlank:
return case_type_blank()
@router.get("/list", response_model=List[schemas.CaseType])
def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)):
return [case_type_info(item) for item in db.query(CaseType).order_by(CaseType.name).all()]
@router.get("/{id_}", response_model=schemas.CaseType)
def show_id(
id_: uuid.UUID,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["case-types"]),
) -> schemas.CaseType:
item: CaseType = db.query(CaseType).filter(CaseType.id == id_).first()
return case_type_info(item)
def case_type_info(item: CaseType) -> schemas.CaseType:
return schemas.CaseType(id=item.id, name=item.name)
def case_type_blank() -> schemas.CaseTypeBlank:
return schemas.CaseTypeBlank(name="")