diff --git a/src/CallerApiManager/data_models.py b/src/CallerApiManager/data_models.py index 351b723..df81647 100644 --- a/src/CallerApiManager/data_models.py +++ b/src/CallerApiManager/data_models.py @@ -24,6 +24,15 @@ class AccessResponse(BaseModel): class Registration(BaseModel): auth_key: str +class BasicModel(BaseModel): + id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) + created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") + updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") + + class Config: + extra = "ignore" + from_attributes = True + class User(BaseModel): id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) @@ -42,16 +51,11 @@ class User(BaseModel): extra = "ignore" from_attributes = True - - -class SIPAccount(BaseModel): +class SIPAccount(BasicModel): """ SIP-аккаунт. """ unique_id: str = Field(description="Уникальный идентификатор", example="00000000-0000-0000-0000-000000000000") - id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) - created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") - updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") owner: Optional[User] = Field(description="Владелец") name: str = Field(max_length=255, description="Название", example="SIP-аккаунт-1") @@ -102,15 +106,12 @@ class SIPAccount(BaseModel): extra = "ignore" from_attributes = True -class CallPrompt(BaseModel): - id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) +class CallPrompt(BasicModel): owner: Optional[User] = Field(description="Владелец", default=None) name: str = Field(max_length=255, description="Название промпта", example="Приветствие клиенту") content: str = Field(description="Содержание промпта", example="Добро пожаловать в службу поддержки") speak_first: bool = Field(default=True, description="Говорить первым") can_interrupt_greeting: bool = Field(default=False, description="Может прерывать приветствие") - created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") - updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") class Config: extra = "ignore" @@ -135,8 +136,7 @@ class OpenAISettings(BaseModel): top_p: float = Field(..., title="Top P") -class YandexFleet(BaseModel): - id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) +class YandexFleet(BasicModel): owner: Optional[User] = Field(description="Владелец", default=None) name: str = Field(max_length=255, description="Название флота", example="Флот такси") park_id: str = Field(max_length=255, description="ID флота в Yandex", example="park-12345") @@ -146,18 +146,18 @@ class YandexFleet(BaseModel): description="Часовой пояс", example="Europe/Moscow" ) - created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") - updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") class Config: extra = "ignore" from_attributes = True -class Driver(BaseModel): - id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) +class Driver(BasicModel): yandex_fleet: Optional[YandexFleet] = Field(description="ID или название флота Yandex", example="fleet-123", default=None) driver_id: str = Field(max_length=64, description="ID драйвера в Yandex", example="drv-abc123") + first_name: Optional[str] = Field(description="Имя", example="John", default=None) + last_name : Optional[str] = Field(description="Фамилия", example="Doe", default=None) + middle_name: Optional[str] = Field(description="Отчество", example="Ivanovich", default=None) created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") @@ -166,9 +166,8 @@ class Driver(BaseModel): from_attributes = True -class Call(BaseModel): +class Call(BasicModel): unique_id: str = Field(description="Уникальный идентификатор", example="00000000-0000-0000-0000-000000000000") - id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) owner: Optional[User] = Field(description="Владелец") call_datetime: Optional[str] = Field(description="Время последнего звонка (по МСК)", example="2024-01-01T12:00:00") prompt: Optional[CallPrompt] = Field(description="Промпт",) @@ -177,8 +176,6 @@ class Call(BaseModel): data: Optional[Dict[str, Any]] = Field(description="Дополнительные данные", nullable=True) channel_id: Optional[str] = Field(description="ID канала", example=" tweak-456", null=True) audio_file: Optional[str] = Field(description="Путь к аудио", example="/audio/call-123.mp3", null=True) - created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") - updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") class Config: extra = "ignore" @@ -200,15 +197,12 @@ class CallIn(BaseModel): from_attributes = True -class CallDialog(BaseModel): +class CallDialog(BasicModel): unique_id: str = Field(description="Уникальный идентификатор", example="00000000-0000-0000-0000-000000000000") - id: Optional[int] = Field(description="Идентификатор (автоматический)", default=None) call: Optional[Call] = Field(description="ID звонка", example="call-123") dialog: Optional[str] = Field(description="Содержание диалога", null=True) data: Optional[Dict[str, Any]] = Field(description="Дополнительные данные", nullable=True) call_time: int = Field(default=0, description="Время звонка (в секундах)", ge=0) - created_at: Optional[str] = Field(description="Дата создания", example="2024-01-01T12:00:00") - updated_at: Optional[str] = Field(description="Дата обновления", example="2024-01-01T12:00:00") class Config: extra = "ignore"