feat: parser, refactoring
This commit is contained in:
@@ -34,8 +34,6 @@ __all__ = (
|
||||
'PlacementViewsHistoryOutput',
|
||||
'GetViewsHistoryInput',
|
||||
'GetViewsHistoryOutput',
|
||||
'FetchViewsInputManually',
|
||||
'FetchViewsManuallyOutput',
|
||||
'UpdateViewsManuallyInput',
|
||||
'UserOutput',
|
||||
'DateGrouping',
|
||||
@@ -51,6 +49,11 @@ __all__ = (
|
||||
'SpendingDataPoint',
|
||||
'GetSpendingAnalyticsInput',
|
||||
'GetSpendingAnalyticsOutput',
|
||||
'ParserTrackTaskRequest',
|
||||
'ParserGetViewsRequest',
|
||||
'ParserPostFoundEvent',
|
||||
'ParserPostDeletedEvent',
|
||||
'ParserViewsUpdatedEvent',
|
||||
)
|
||||
|
||||
from .analytics import (
|
||||
@@ -86,6 +89,13 @@ from .external_channel import (
|
||||
UpdateExternalChannelInput,
|
||||
UpdateExternalChannelLinksInput,
|
||||
)
|
||||
from .nats_messages import (
|
||||
ParserGetViewsRequest,
|
||||
ParserPostDeletedEvent,
|
||||
ParserPostFoundEvent,
|
||||
ParserTrackTaskRequest,
|
||||
ParserViewsUpdatedEvent,
|
||||
)
|
||||
from .placement import (
|
||||
CreatePlacementInput,
|
||||
DeletePlacementInput,
|
||||
@@ -109,8 +119,6 @@ from .telegram_login import TelegramLoginInput
|
||||
from .user import UserOutput
|
||||
from .validate_login_token import ValidateLoginTokenInput, ValidateLoginTokenOutput
|
||||
from .views import (
|
||||
FetchViewsInputManually,
|
||||
FetchViewsManuallyOutput,
|
||||
GetViewsHistoryInput,
|
||||
GetViewsHistoryOutput,
|
||||
PlacementViewsHistoryOutput,
|
||||
|
||||
48
src/dto/nats_messages.py
Normal file
48
src/dto/nats_messages.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import pydantic
|
||||
|
||||
|
||||
# Исходящие сообщения (к tgex-parser)
|
||||
class ParserTrackTaskRequest(pydantic.BaseModel):
|
||||
"""Сообщение для parser.track - добавить задачу на отслеживание канала"""
|
||||
|
||||
task_id: str # UUID placement
|
||||
channel: str # username внешнего канала
|
||||
target_text: str # invite_link для поиска в постах
|
||||
|
||||
|
||||
class ParserGetViewsRequest(pydantic.BaseModel):
|
||||
"""Сообщение для parser.get_views - синхронно получить просмотры поста"""
|
||||
|
||||
channel: str
|
||||
message_id: int
|
||||
|
||||
|
||||
# Входящие события (от tgex-parser)
|
||||
class ParserPostFoundEvent(pydantic.BaseModel):
|
||||
"""Событие parser.event.post_found - найден новый пост с target_text"""
|
||||
|
||||
task_id: str # UUID placement
|
||||
channel: str
|
||||
message_id: int
|
||||
link: str # полная ссылка https://t.me/channel/message_id
|
||||
text: str # текст поста
|
||||
views: int
|
||||
|
||||
|
||||
class ParserPostDeletedEvent(pydantic.BaseModel):
|
||||
"""Событие parser.event.post_deleted - отслеживаемый пост удален"""
|
||||
|
||||
task_id: str
|
||||
channel: str
|
||||
message_id: int
|
||||
link: str
|
||||
views: int
|
||||
|
||||
|
||||
class ParserViewsUpdatedEvent(pydantic.BaseModel):
|
||||
"""Событие parser.event.views_updated - обновилось количество просмотров"""
|
||||
|
||||
task_id: str
|
||||
channel: str
|
||||
message_id: int
|
||||
views: int
|
||||
@@ -52,7 +52,6 @@ class CreatePlacementInput(pydantic.BaseModel):
|
||||
placement_date: datetime.datetime
|
||||
cost: float | None = None
|
||||
comment: str | None = None
|
||||
ad_post_url: str | None = None
|
||||
invite_link_type: domain.InviteLinkType = domain.InviteLinkType.PUBLIC
|
||||
|
||||
|
||||
|
||||
@@ -3,8 +3,6 @@ import uuid
|
||||
|
||||
import pydantic
|
||||
|
||||
from src import domain
|
||||
|
||||
|
||||
class PlacementViewsHistoryOutput(pydantic.BaseModel):
|
||||
"""История просмотров placement."""
|
||||
@@ -31,21 +29,6 @@ class GetViewsHistoryOutput(pydantic.BaseModel):
|
||||
histories: list[PlacementViewsHistoryOutput]
|
||||
|
||||
|
||||
class FetchViewsInputManually(pydantic.BaseModel):
|
||||
"""Запросить обновление просмотров для закупа."""
|
||||
|
||||
placement_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
|
||||
|
||||
class FetchViewsManuallyOutput(pydantic.BaseModel):
|
||||
placement_id: uuid.UUID
|
||||
views_count: int | None # None если не удалось получить
|
||||
views_availability: domain.PostViewsAvailability
|
||||
fetched_at: datetime.datetime
|
||||
error_message: str | None = None # Сообщение об ошибке если не удалось
|
||||
|
||||
|
||||
class UpdateViewsManuallyInput(pydantic.BaseModel):
|
||||
"""Ручное обновление просмотров."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user