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)