order.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # app/schemas/order.py
  2. import json
  3. from pydantic import BaseModel, field_validator
  4. from typing import Optional, Dict, Any, Literal, List
  5. from datetime import datetime
  6. class VasOrderBase(BaseModel):
  7. status: Optional[Literal['pending','paid','completed','closed']] = None
  8. user_inputs: Optional[Dict[str, Any]] = None
  9. @field_validator("user_inputs", mode="before")
  10. def normalize_json_field(cls, v):
  11. if v is None:
  12. return None
  13. if isinstance(v, str):
  14. try:
  15. return json.loads(v)
  16. except Exception:
  17. return {}
  18. return v
  19. class VasOrderCreate(BaseModel):
  20. product_id: int
  21. user_inputs: Dict[str, Any]
  22. class VasOrderUpdate(VasOrderBase):
  23. pass
  24. class VasOrderPatchUserInputs(BaseModel):
  25. user_inputs: Dict[str, Any]
  26. class VasOrderOut(VasOrderBase):
  27. id: str
  28. user_id: str
  29. product_name: Optional[str]
  30. user_name: Optional[str]
  31. base_amount: int
  32. base_currency: str
  33. created_at: datetime
  34. updated_at: datetime
  35. model_config = {
  36. "from_attributes": True
  37. }