import uuid from typing import Annotated from fastapi import Depends from fastapi.routing import APIRouter from src import dependencies, dto from src.adapter.jwt import JWTPayload creatives_router = APIRouter(prefix='/creatives', tags=['creatives']) @creatives_router.get('') async def list_creatives( current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)], target_channel_id: uuid.UUID | None = None, include_archived: bool = False, ) -> dto.GetCreativesOutput: input = dto.GetCreativesInput( user_id=current_user.user_id, target_channel_id=target_channel_id, include_archived=include_archived, ) return await dependencies.get_usecase().get_creatives(input=input) @creatives_router.get('/{creative_id}') async def get_creative( creative_id: uuid.UUID, current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)], ) -> dto.CreativeOutput: input = dto.GetCreativeInput( creative_id=creative_id, user_id=current_user.user_id, ) return await dependencies.get_usecase().get_creative(input=input) @creatives_router.post('') async def create_creative( request: dto.CreateCreativeInput, current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)], ) -> dto.CreativeOutput: return await dependencies.get_usecase().create_creative(request, current_user.user_id) @creatives_router.patch('/{creative_id}') async def update_creative( creative_id: uuid.UUID, request: dto.UpdateCreativeInput, current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)], ) -> dto.CreativeOutput: return await dependencies.get_usecase().update_creative( creative_id=creative_id, input=request, user_id=current_user.user_id, ) @creatives_router.post('/{creative_id}/archive') async def archive_creative( creative_id: uuid.UUID, request: dto.ArchiveCreativeInput, current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)], ) -> dto.CreativeOutput: return await dependencies.get_usecase().archive_creative( creative_id=creative_id, input=request, user_id=current_user.user_id, ) @creatives_router.delete('/{creative_id}') async def delete_creative( creative_id: uuid.UUID, current_user: Annotated[JWTPayload, Depends(dependencies.get_current_user)], ) -> None: input = dto.DeleteCreativeInput( creative_id=creative_id, user_id=current_user.user_id, ) await dependencies.get_usecase().delete_creative(input)