order.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 VasOrderAdjustPrice(BaseModel):
  25. adjustment_delta: int
  26. reason: Optional[str] = None
  27. class VasOrderPatchUserInputs(BaseModel):
  28. user_inputs: Dict[str, Any]
  29. class VasOrderOut(VasOrderBase):
  30. id: str
  31. user_id: str
  32. product_name: Optional[str]
  33. user_name: Optional[str]
  34. base_amount: int
  35. adjustment_delta: int
  36. final_amount: int
  37. base_currency: str
  38. created_at: datetime
  39. updated_at: datetime
  40. model_config = {
  41. "from_attributes": True
  42. }