203 lines
4.7 KiB
Python
203 lines
4.7 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class CampaignCreateRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
config: dict[str, Any]
|
|
source_filename: str | None = None
|
|
source_base_path: str | None = None
|
|
|
|
|
|
class CampaignCreateMinimalRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
external_id: str
|
|
name: str
|
|
description: str | None = None
|
|
current_flow: str = "create"
|
|
current_step: str = "basics"
|
|
|
|
|
|
class CampaignVersionUpdateRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
campaign_json: dict[str, Any] | None = None
|
|
current_flow: str | None = None
|
|
current_step: str | None = None
|
|
workflow_state: str | None = None
|
|
is_complete: bool | None = None
|
|
editor_state: dict[str, Any] | None = None
|
|
source_filename: str | None = None
|
|
source_base_path: str | None = None
|
|
|
|
|
|
class CampaignVersionSetStepRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
current_flow: str | None = None
|
|
current_step: str
|
|
|
|
|
|
class CampaignPartialValidationRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
campaign_json: dict[str, Any] | None = None
|
|
section: str | None = None
|
|
|
|
|
|
class CampaignVersionResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: str
|
|
campaign_id: str
|
|
version_number: int
|
|
schema_version: str
|
|
source_filename: str | None = None
|
|
source_base_path: str | None = None
|
|
workflow_state: str = "editing"
|
|
current_flow: str = "manual"
|
|
current_step: str | None = None
|
|
is_complete: bool = False
|
|
editor_state: dict[str, Any] = Field(default_factory=dict)
|
|
autosaved_at: datetime | None = None
|
|
published_at: datetime | None = None
|
|
locked_at: datetime | None = None
|
|
locked_by_user_id: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
validation_summary: dict[str, Any] | None = None
|
|
build_summary: dict[str, Any] | None = None
|
|
|
|
|
|
class CampaignVersionDetailResponse(CampaignVersionResponse):
|
|
raw_json: dict[str, Any]
|
|
|
|
|
|
class CampaignPartialValidationResponse(BaseModel):
|
|
ok: bool
|
|
section: str | None = None
|
|
error_count: int
|
|
warning_count: int
|
|
info_count: int
|
|
issues: list[dict[str, Any]]
|
|
|
|
|
|
class CampaignResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: str
|
|
external_id: str
|
|
name: str
|
|
description: str | None = None
|
|
status: str
|
|
current_version_id: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class CampaignCreateResponse(BaseModel):
|
|
campaign: CampaignResponse
|
|
version: CampaignVersionResponse
|
|
|
|
|
|
class CampaignListResponse(BaseModel):
|
|
campaigns: list[CampaignResponse]
|
|
|
|
|
|
class CampaignJobsResponse(BaseModel):
|
|
jobs: list[dict[str, Any]]
|
|
|
|
|
|
class ValidateCampaignRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
check_files: bool = False
|
|
|
|
|
|
class BuildCampaignRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
write_eml: bool = True
|
|
|
|
|
|
class ApiKeyCreateRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
name: str
|
|
scopes: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class ApiKeyCreateResponse(BaseModel):
|
|
id: str
|
|
name: str
|
|
prefix: str
|
|
scopes: list[str]
|
|
secret: str
|
|
|
|
|
|
class QueueCampaignRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
version_id: str | None = None
|
|
include_warnings: bool = True
|
|
enqueue_celery: bool = True
|
|
dry_run: bool = False
|
|
|
|
|
|
class QueueCampaignResponse(BaseModel):
|
|
campaign_id: str
|
|
version_id: str
|
|
queued_count: int
|
|
skipped_count: int
|
|
blocked_count: int
|
|
enqueued_count: int
|
|
dry_run: bool = False
|
|
|
|
|
|
class AppendSentRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
enqueue_celery: bool = True
|
|
dry_run: bool = False
|
|
|
|
|
|
class CampaignActionResponse(BaseModel):
|
|
result: dict[str, Any]
|
|
|
|
class ReportEmailRequest(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
to: list[str]
|
|
include_jobs: bool = False
|
|
attach_jobs_csv: bool = True
|
|
attach_report_json: bool = False
|
|
dry_run: bool = False
|
|
|
|
|
|
class ReportEmailResponse(BaseModel):
|
|
result: dict[str, Any]
|
|
|
|
|
|
class AuditLogItemResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: str
|
|
tenant_id: str | None = None
|
|
user_id: str | None = None
|
|
api_key_id: str | None = None
|
|
action: str
|
|
object_type: str | None = None
|
|
object_id: str | None = None
|
|
details: dict[str, Any] | None = None
|
|
created_at: datetime
|
|
|
|
|
|
class AuditLogListResponse(BaseModel):
|
|
items: list[AuditLogItemResponse]
|