from fastapi import APIRouter, Body, Path from pyxdi.ext.fastapi import Inject from starlette import status from campaigns.api import schemas from campaigns.assets.handlers import ( GetAssetHandler, GetAssetRequest, UpdateAssetHandler, UpdateAssetRequest, ) from campaigns.assets.models import Asset router = APIRouter(tags=["assets"]) @router.get( "/assets/{assetId:path}", operation_id="getAsset", response_model=schemas.Asset, response_model_by_alias=True, responses={ status.HTTP_404_NOT_FOUND: {"model": schemas.Error}, }, ) async def get_asset( asset_id: str = Path(alias="assetId", description="Asset id or key"), handler: GetAssetHandler = Inject(), ) -> Asset: return await handler.handle(GetAssetRequest(asset_id=asset_id)) @router.patch( "/assets/{assetId:path}", operation_id="updateAsset", description="Asset partial update", response_model=schemas.Asset, response_model_by_alias=True, responses={ status.HTTP_404_NOT_FOUND: {"model": schemas.Error}, }, ) async def update_asset( asset_id: str = Path(alias="assetId", description="Asset id or key"), data: schemas.UpdateAssetInput = Body(), handler: UpdateAssetHandler = Inject(), ) -> Asset: return await handler.handle( UpdateAssetRequest(asset_id=asset_id, data=data.dict(exclude_unset=True)) )