import uuid from typing import Annotated from fastapi import Depends from fastapi.routing import APIRouter from src import deps, dto from src.adapter.jwt import JWTPayload placements_router = APIRouter(prefix='/placements', tags=['placements']) @placements_router.get('') async def list_placements( current_user: Annotated[JWTPayload, Depends(deps.get_current_user)], target_channel_id: uuid.UUID | None = None, external_channel_id: uuid.UUID | None = None, creative_id: uuid.UUID | None = None, include_archived: bool = False, ) -> dto.GetPlacementsOutput: input = dto.GetPlacementsInput( user_id=current_user.user_id, target_channel_id=target_channel_id, external_channel_id=external_channel_id, creative_id=creative_id, include_archived=include_archived, ) return await deps.get_usecase().get_placements(input=input) @placements_router.get('/{placement_id}') async def get_placement( placement_id: uuid.UUID, current_user: Annotated[JWTPayload, Depends(deps.get_current_user)], ) -> dto.PlacementOutput: input = dto.GetPlacementInput( placement_id=placement_id, user_id=current_user.user_id, ) return await deps.get_usecase().get_placement(input=input) @placements_router.post('') async def create_placement( request: dto.CreatePlacementInput, current_user: Annotated[JWTPayload, Depends(deps.get_current_user)], ) -> dto.PlacementOutput: return await deps.get_usecase().create_placement(request, current_user.user_id) @placements_router.patch('/{placement_id}') async def update_placement( placement_id: uuid.UUID, request: dto.UpdatePlacementInput, current_user: Annotated[JWTPayload, Depends(deps.get_current_user)], ) -> dto.PlacementOutput: return await deps.get_usecase().update_placement( placement_id=placement_id, input=request, user_id=current_user.user_id, ) @placements_router.delete('/{placement_id}') async def delete_placement( placement_id: uuid.UUID, current_user: Annotated[JWTPayload, Depends(deps.get_current_user)], ) -> None: input = dto.DeletePlacementInput( placement_id=placement_id, user_id=current_user.user_id, ) await deps.get_usecase().delete_placement(input)