креативы

This commit is contained in:
Artem Tsyrulnikov
2026-01-03 16:11:05 +03:00
parent 841a8b5aaa
commit c04faf8132
15 changed files with 597 additions and 59 deletions

View File

@@ -6,11 +6,35 @@ if typing.TYPE_CHECKING:
from .. import Usecase
async def get_jwt_by_telegram_id(self: 'Usecase', telegram_id: int) -> dto.ValidateLoginTokenOutput:
async def get_jwt_by_telegram_id(
self: 'Usecase',
telegram_id: int,
username: str | None = None,
first_name: str | None = None,
last_name: str | None = None,
) -> dto.ValidateLoginTokenOutput:
user = await self.database.get_user(telegram_id=telegram_id)
if not user:
raise domain.UserNotFound()
user = domain.User(
telegram_id=telegram_id,
username=username,
first_name=first_name,
last_name=last_name,
)
await self.database.create_user(user)
else:
updated = False
if username is not None and user.username != username:
user.username = username
updated = True
if first_name is not None and user.first_name != first_name:
user.first_name = first_name
updated = True
if last_name is not None and user.last_name != last_name:
user.last_name = last_name
updated = True
if updated:
await self.database.update_user(user)
access_token = self.jwt_encoder.encode_access_token(
user_id=user.id,

View File

@@ -22,11 +22,17 @@ async def create_creative(
log.warning('User %s attempted to create creative for unavailable project %s', user_id, project_id)
raise domain.ProjectNotFound(project_id)
domain.validate_media_size(input.media_data)
creative_text = domain.replace_invite_link_with_tag(input.text)
creative = domain.Creative(
name=input.name,
text=creative_text,
media_type=input.media_type,
media_file_id=input.media_file_id,
media_data=input.media_data,
buttons=[button.model_dump() for button in input.buttons],
status=domain.CreativeStatus.ACTIVE,
project_id=project.id,
workspace_id=workspace_id,
@@ -37,6 +43,9 @@ async def create_creative(
id=creative.id,
name=creative.name,
text=creative.text,
media_type=creative.media_type,
media_file_id=creative.media_file_id,
buttons=creative.buttons,
project_id=project.id,
project_channel_title=project.channel.title,
created_at=creative.created_at,

View File

@@ -26,6 +26,9 @@ async def get_creative(self: 'Usecase', input: dto.GetCreativeInput) -> dto.Crea
id=creative.id,
name=creative.name,
text=creative.text,
media_type=creative.media_type,
media_file_id=creative.media_file_id,
buttons=creative.buttons,
project_id=creative.project_id,
project_channel_title=creative.project.channel.title,
created_at=creative.created_at,

View File

@@ -32,6 +32,9 @@ async def get_creatives(self: 'Usecase', input: dto.GetCreativesInput) -> list[d
id=creative.id,
name=creative.name,
text=creative.text,
media_type=creative.media_type,
media_file_id=creative.media_file_id,
buttons=creative.buttons,
project_id=creative.project_id,
project_channel_title=creative.project.channel.title,
created_at=creative.created_at,

View File

@@ -30,6 +30,15 @@ async def update_creative(
creative.name = input.name
if input.text:
creative.text = domain.replace_invite_link_with_tag(input.text)
if input.media_data is not None:
domain.validate_media_size(input.media_data)
creative.media_data = input.media_data
if input.media_type is not None:
creative.media_type = input.media_type
if input.media_file_id is not None:
creative.media_file_id = input.media_file_id
if input.buttons is not None:
creative.buttons = [button.model_dump() for button in input.buttons]
if input.status:
creative.status = input.status
@@ -41,6 +50,9 @@ async def update_creative(
id=creative.id,
name=creative.name,
text=creative.text,
media_type=creative.media_type,
media_file_id=creative.media_file_id,
buttons=creative.buttons,
project_id=creative.project_id,
project_channel_title=creative.project.channel.title,
created_at=creative.created_at,