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")