46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from fastapi import APIRouter, Depends
|
|
from uuid import UUID
|
|
from sqlalchemy.orm import Session
|
|
|
|
from fastapi_demo.app.db.deps import get_db
|
|
from fastapi_demo.app.repositories.sql_assets_repo import SqlAssetsRepo
|
|
from fastapi_demo.app.services.assets_service import AssetsService
|
|
from fastapi_demo.app.schemas.asset import (
|
|
AssetCreate,
|
|
AssetOut,
|
|
AssetTransitionIn,
|
|
AssetEventOut,
|
|
)
|
|
|
|
router = APIRouter(prefix="/assets", tags=["assets"])
|
|
|
|
|
|
def get_service(db: Session = Depends(get_db)) -> AssetsService:
|
|
repo = SqlAssetsRepo(db)
|
|
return AssetsService(repo)
|
|
|
|
|
|
@router.post("", response_model=AssetOut, status_code=201)
|
|
def create_asset(payload: AssetCreate, svc: AssetsService = Depends(get_service)):
|
|
return svc.create_asset(payload)
|
|
|
|
|
|
@router.get("/{asset_id}", response_model=AssetOut)
|
|
def get_asset(asset_id: UUID, svc: AssetsService = Depends(get_service)):
|
|
return svc.get_asset(asset_id)
|
|
|
|
|
|
@router.post("/{asset_id}/transition", response_model=AssetOut)
|
|
def transition_asset(
|
|
asset_id: UUID,
|
|
payload: AssetTransitionIn,
|
|
svc: AssetsService = Depends(get_service),
|
|
):
|
|
asset, _event = svc.transition(asset_id, payload)
|
|
return asset
|
|
|
|
|
|
@router.get("/{asset_id}/events", response_model=list[AssetEventOut])
|
|
def list_events(asset_id: UUID, svc: AssetsService = Depends(get_service)):
|
|
return svc.list_events(asset_id)
|