Files
remnawave-bedolaga-telegram…/app/webapi/schemas/tickets.py

71 lines
1.7 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel, Field
class TicketMessageResponse(BaseModel):
id: int
user_id: int
message_text: str
is_from_admin: bool
has_media: bool
media_type: Optional[str] = None
media_file_id: Optional[str] = None
media_caption: Optional[str] = None
created_at: datetime
class TicketResponse(BaseModel):
id: int
user_id: int
title: str
status: str
priority: str
created_at: datetime
updated_at: datetime
closed_at: Optional[datetime] = None
user_reply_block_permanent: bool
user_reply_block_until: Optional[datetime] = None
messages: List[TicketMessageResponse] = Field(default_factory=list)
class TicketStatusUpdateRequest(BaseModel):
status: str
class TicketPriorityUpdateRequest(BaseModel):
priority: str
class TicketReplyBlockRequest(BaseModel):
permanent: bool = False
until: Optional[datetime] = None
class TicketReplyRequest(BaseModel):
message_text: Optional[str] = Field(default=None, max_length=4000)
media_type: Optional[str] = Field(
default=None,
description="Тип медиа (photo, video, document, voice и т.д.)",
max_length=32,
)
media_file_id: Optional[str] = Field(default=None, max_length=255)
media_caption: Optional[str] = Field(default=None, max_length=4000)
class TicketReplyResponse(BaseModel):
ticket: TicketResponse
message: TicketMessageResponse
class TicketMediaResponse(BaseModel):
id: int
ticket_id: int
media_type: str
media_file_id: str
media_caption: Optional[str] = None
media_url: Optional[str] = None