| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import json
- from pydantic import BaseModel, field_validator
- from typing import Optional, Dict, Any, Literal, List
- from datetime import datetime
- class VasTicketBase(BaseModel):
- status: Optional[
- Literal['pending', 'info_required', 'resolved', 'rejected']
- ] = None
- admin_comment: Optional[str] = None
- extra_fields: Optional[Dict[str, Any]] = None
-
- @field_validator("extra_fields", mode="before")
- def normalize_json_field(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except Exception:
- return {}
- return v
- class VasTicketCreate(BaseModel):
- order_id: str
-
- type: Literal['refund', 'dispute', 'change_request']
- reason: Optional[str]
- class VasTicketOut(VasTicketBase):
- id: int
- order_id: str
- user_id: str
- type: str
- reason: Optional[str]
- created_at: datetime
- updated_at: datetime
- model_config = {
- "from_attributes": True
- }
- class VasTicketStatusUpdate(BaseModel):
- status: Literal["resolved", "info_required", "rejected"]
- comment: str
-
- class VasTicketMessageBase(BaseModel):
- ticket_id: int
- sender_type: Literal["user", "admin", "system"]
- sender_id: Optional[str] = None
- content: Optional[str] = None
- attachments: Optional[Dict[str, Any]] = None
- @field_validator("attachments", mode="before")
- def normalize_json_field(cls, v):
- if v is None:
- return None
- if isinstance(v, str):
- try:
- return json.loads(v)
- except Exception:
- return {}
- return v
- class VasTicketMessageCreate(BaseModel):
- content: str
- attachments: Optional[dict] = None
- class VasTicketMessageOut(VasTicketMessageBase):
- id: int
- created_at: datetime
-
- model_config = {
- "from_attributes": True
- }
|