luthor/luthor/luthor/routers/section.py

125 lines
3.1 KiB
Python

import uuid
from typing import List
import luthor.schemas.act 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.act import Act
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.Act)
def save(
data: schemas.ActIn,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["acts"]),
) -> schemas.Act:
try:
item = Act(name=data.name)
db.add(item)
db.commit()
return act_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.Act)
def update(
id_: uuid.UUID,
data: schemas.ActIn,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["acts"]),
) -> schemas.Act:
try:
item: Act = db.query(Act).filter(Act.id == id_).first()
item.name = data.name
db.commit()
return act_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.ActBlank)
def delete(
id_: uuid.UUID,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["acts"]),
) -> schemas.ActBlank:
try:
item: Act = db.query(Act).filter(Act.id == id_).first()
db.delete(item)
db.commit()
return act_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.ActBlank)
def show_blank(
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["acts"]),
) -> schemas.ActBlank:
return act_blank()
@router.get("/list", response_model=List[schemas.Act])
def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)):
return [act_info(item) for item in db.query(Act).order_by(Act.name).all()]
@router.get("/{id_}", response_model=schemas.Act)
def show_id(
id_: uuid.UUID,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["acts"]),
) -> schemas.Act:
item: Act = db.query(Act).filter(Act.id == id_).first()
return act_info(item)
def act_info(item: Act) -> schemas.Act:
return schemas.Act(id=item.id, name=item.name)
def act_blank() -> schemas.ActBlank:
return schemas.ActBlank(name="")