46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
import logging
|
|
import uuid
|
|
from typing import TYPE_CHECKING
|
|
|
|
from src import domain, dto
|
|
|
|
if TYPE_CHECKING:
|
|
from .. import Usecase
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
async def update_creative(
|
|
self: 'Usecase',
|
|
creative_id: uuid.UUID,
|
|
input: dto.UpdateCreativeInput,
|
|
user_id: uuid.UUID,
|
|
workspace_id: uuid.UUID,
|
|
) -> dto.CreativeOutput:
|
|
await self.ensure_workspace_access(workspace_id, user_id)
|
|
|
|
creative = await self.database.get_creative(workspace_id, creative_id)
|
|
if not creative:
|
|
log.warning('User %s attempted to update unavailable creative %s', user_id, creative_id)
|
|
raise domain.CreativeNotFound(creative_id)
|
|
|
|
if input.name:
|
|
creative.name = input.name
|
|
if input.text:
|
|
creative.text = input.text
|
|
if input.status:
|
|
creative.status = input.status
|
|
|
|
await self.database.update_creative(creative)
|
|
|
|
return dto.CreativeOutput(
|
|
id=creative.id,
|
|
name=creative.name,
|
|
text=creative.text,
|
|
project_id=creative.project_id,
|
|
project_channel_title=creative.project.channel.title,
|
|
created_at=creative.created_at,
|
|
status=creative.status,
|
|
placements_count=creative.placements_count,
|
|
)
|