feat: creatives and external channels
This commit is contained in:
85
src/controller/http/creatives.py
Normal file
85
src/controller/http/creatives.py
Normal file
@@ -0,0 +1,85 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user