82 lines
1.6 KiB
Python
82 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import datetime, timezone
|
|
from enum import StrEnum
|
|
from typing import Any
|
|
|
|
|
|
class ApplicationStatus(StrEnum):
|
|
NEW = "new"
|
|
IN_PROGRESS = "in_progress"
|
|
NEED_INFO = "need_info"
|
|
DONE = "done"
|
|
REJECTED = "rejected"
|
|
|
|
|
|
class ExternalSyncStatus(StrEnum):
|
|
NOT_SENT = "not_sent"
|
|
SENT = "sent"
|
|
FAILED = "failed"
|
|
DISABLED = "disabled"
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class ApplicationCreate:
|
|
customer_id: int | None
|
|
customer_name: str
|
|
chat_id: int | None
|
|
category: str
|
|
description: str
|
|
attachments_json: str = "[]"
|
|
source: str = "bot"
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class ApplicationRecord:
|
|
id: int
|
|
customer_id: int | None
|
|
customer_name: str
|
|
chat_id: int | None
|
|
category: str
|
|
description: str
|
|
attachments_json: str
|
|
status: str
|
|
external_sync_status: str
|
|
external_id: str | None
|
|
external_error: str | None
|
|
source: str
|
|
created_at: str
|
|
updated_at: str
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class ApplicationEventRecord:
|
|
id: int
|
|
application_id: int
|
|
event_type: str
|
|
actor: str
|
|
details_json: str
|
|
created_at: str
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class ChatRecord:
|
|
chat_id: int
|
|
chat_type: str
|
|
title: str | None
|
|
username: str | None
|
|
last_seen_at: str
|
|
is_active: int
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class ExternalCreateResult:
|
|
ok: bool
|
|
external_id: str | None = None
|
|
error: str | None = None
|
|
raw_response: dict[str, Any] | None = None
|
|
|
|
|
|
def utc_now_iso() -> str:
|
|
return datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z")
|