Files
LagerFastApi/fastapi_demo/app/api/routes/assets.py
2026-02-12 18:58:48 +01:00

46 lines
1.4 KiB
Python

from fastapi import APIRouter, Depends
from uuid import UUID
from sqlalchemy.orm import Session
from fastapi_demo.app.infrastructure.db.deps import get_db
from fastapi_demo.app.infrastructure.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)