feat: add workspace
This commit is contained in:
@@ -53,6 +53,11 @@ __all__ = (
|
||||
'ParserPostFoundEvent',
|
||||
'ParserPostDeletedEvent',
|
||||
'ParserViewsUpdatedEvent',
|
||||
'WorkspaceMembershipOutput',
|
||||
'GetWorkspacesOutput',
|
||||
'CreateWorkspaceInput',
|
||||
'CreateWorkspaceOutput',
|
||||
'UpdateWorkspaceInput',
|
||||
)
|
||||
|
||||
from .analytics import (
|
||||
@@ -122,3 +127,10 @@ from .views import (
|
||||
PlacementViewsHistoryOutput,
|
||||
UpdateViewsManuallyInput,
|
||||
)
|
||||
from .workspace import (
|
||||
CreateWorkspaceInput,
|
||||
CreateWorkspaceOutput,
|
||||
GetWorkspacesOutput,
|
||||
UpdateWorkspaceInput,
|
||||
WorkspaceMembershipOutput,
|
||||
)
|
||||
|
||||
@@ -54,6 +54,7 @@ class ExternalChannelAnalyticsOutput(pydantic.BaseModel):
|
||||
|
||||
class GetPlacementsAnalyticsInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
target_channel_id: uuid.UUID | None = None
|
||||
|
||||
|
||||
@@ -63,6 +64,7 @@ class GetPlacementsAnalyticsOutput(pydantic.BaseModel):
|
||||
|
||||
class GetCreativesAnalyticsInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
target_channel_id: uuid.UUID | None = None
|
||||
|
||||
|
||||
@@ -72,6 +74,7 @@ class GetCreativesAnalyticsOutput(pydantic.BaseModel):
|
||||
|
||||
class GetExternalChannelsAnalyticsInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
target_channel_id: uuid.UUID | None = None
|
||||
|
||||
|
||||
@@ -90,6 +93,7 @@ class SpendingDataPoint(pydantic.BaseModel):
|
||||
|
||||
class GetSpendingAnalyticsInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
target_channel_id: uuid.UUID | None = None
|
||||
date_from: datetime.datetime | None = None
|
||||
date_to: datetime.datetime | None = None
|
||||
|
||||
@@ -19,6 +19,7 @@ class CreativeOutput(pydantic.BaseModel):
|
||||
|
||||
class GetCreativesInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
target_channel_id: uuid.UUID | None = None
|
||||
include_archived: bool = False
|
||||
|
||||
@@ -30,6 +31,7 @@ class GetCreativesOutput(pydantic.BaseModel):
|
||||
class GetCreativeInput(pydantic.BaseModel):
|
||||
creative_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
|
||||
class CreateCreativeInput(pydantic.BaseModel):
|
||||
@@ -47,3 +49,4 @@ class UpdateCreativeInput(pydantic.BaseModel):
|
||||
class DeleteCreativeInput(pydantic.BaseModel):
|
||||
creative_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
@@ -15,6 +15,7 @@ class ExternalChannelOutput(pydantic.BaseModel):
|
||||
class GetExternalChannelsInput(pydantic.BaseModel):
|
||||
target_channel_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
|
||||
class GetExternalChannelsOutput(pydantic.BaseModel):
|
||||
@@ -33,6 +34,7 @@ class CreateExternalChannelInput(pydantic.BaseModel):
|
||||
class DeleteExternalChannelInput(pydantic.BaseModel):
|
||||
channel_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
|
||||
class UpdateExternalChannelInput(pydantic.BaseModel):
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
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
|
||||
@@ -30,6 +30,7 @@ class PlacementOutput(pydantic.BaseModel):
|
||||
|
||||
class GetPlacementsInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
target_channel_id: uuid.UUID | None = None
|
||||
external_channel_id: uuid.UUID | None = None
|
||||
creative_id: uuid.UUID | None = None
|
||||
@@ -43,6 +44,7 @@ class GetPlacementsOutput(pydantic.BaseModel):
|
||||
class GetPlacementInput(pydantic.BaseModel):
|
||||
placement_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
|
||||
class CreatePlacementInput(pydantic.BaseModel):
|
||||
@@ -65,3 +67,4 @@ class UpdatePlacementInput(pydantic.BaseModel):
|
||||
class DeletePlacementInput(pydantic.BaseModel):
|
||||
placement_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
@@ -37,6 +37,7 @@ class ConnectTargetChanOutput(pydantic.BaseModel):
|
||||
|
||||
class GetUserTargetChansInput(pydantic.BaseModel):
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
|
||||
|
||||
class GetUserTargetChansOutput(pydantic.BaseModel):
|
||||
|
||||
@@ -19,6 +19,7 @@ class GetViewsHistoryInput(pydantic.BaseModel):
|
||||
|
||||
placement_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
from_date: datetime.datetime | None = None # Фильтр: с какой даты
|
||||
to_date: datetime.datetime | None = None # Фильтр: по какую дату
|
||||
|
||||
@@ -34,4 +35,5 @@ class UpdateViewsManuallyInput(pydantic.BaseModel):
|
||||
|
||||
placement_id: uuid.UUID
|
||||
user_id: uuid.UUID
|
||||
workspace_id: uuid.UUID
|
||||
views_count: int
|
||||
|
||||
23
src/dto/workspace.py
Normal file
23
src/dto/workspace.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import uuid
|
||||
|
||||
import pydantic
|
||||
|
||||
|
||||
class WorkspaceMembershipOutput(pydantic.BaseModel):
|
||||
id: uuid.UUID
|
||||
name: str
|
||||
|
||||
|
||||
class CreateWorkspaceOutput(WorkspaceMembershipOutput): ...
|
||||
|
||||
|
||||
class GetWorkspacesOutput(pydantic.BaseModel):
|
||||
workspaces: list[WorkspaceMembershipOutput]
|
||||
|
||||
|
||||
class CreateWorkspaceInput(pydantic.BaseModel):
|
||||
name: str
|
||||
|
||||
|
||||
class UpdateWorkspaceInput(pydantic.BaseModel):
|
||||
name: str | None = None
|
||||
Reference in New Issue
Block a user