68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
import datetime
|
|
import uuid
|
|
|
|
import pydantic
|
|
|
|
from src import domain
|
|
|
|
|
|
class PlacementOutput(pydantic.BaseModel):
|
|
id: uuid.UUID
|
|
target_channel_id: uuid.UUID
|
|
target_channel_title: str
|
|
external_channel_id: uuid.UUID
|
|
external_channel_title: str
|
|
creative_id: uuid.UUID
|
|
creative_name: str
|
|
placement_date: datetime.datetime
|
|
cost: float | None
|
|
comment: str | None
|
|
ad_post_url: str | None
|
|
invite_link_type: domain.InviteLinkType
|
|
invite_link: str
|
|
status: domain.PlacementStatus
|
|
subscriptions_count: int
|
|
views_count: int | None
|
|
views_availability: domain.PostViewsAvailability
|
|
last_views_fetch_at: datetime.datetime | None
|
|
created_at: datetime.datetime
|
|
|
|
|
|
class GetPlacementsInput(pydantic.BaseModel):
|
|
user_id: uuid.UUID
|
|
target_channel_id: uuid.UUID | None = None
|
|
external_channel_id: uuid.UUID | None = None
|
|
creative_id: uuid.UUID | None = None
|
|
include_archived: bool = False
|
|
|
|
|
|
class GetPlacementsOutput(pydantic.BaseModel):
|
|
placements: list[PlacementOutput]
|
|
|
|
|
|
class GetPlacementInput(pydantic.BaseModel):
|
|
placement_id: uuid.UUID
|
|
user_id: uuid.UUID
|
|
|
|
|
|
class CreatePlacementInput(pydantic.BaseModel):
|
|
target_channel_id: uuid.UUID
|
|
external_channel_id: uuid.UUID
|
|
creative_id: uuid.UUID
|
|
placement_date: datetime.datetime
|
|
cost: float | None = None
|
|
comment: str | None = None
|
|
invite_link_type: domain.InviteLinkType = domain.InviteLinkType.PUBLIC
|
|
|
|
|
|
class UpdatePlacementInput(pydantic.BaseModel):
|
|
placement_date: datetime.datetime | None = None
|
|
cost: float | None = None
|
|
comment: str | None = None
|
|
status: domain.PlacementStatus | None = None
|
|
|
|
|
|
class DeletePlacementInput(pydantic.BaseModel):
|
|
placement_id: uuid.UUID
|
|
user_id: uuid.UUID
|