payment_event.py 961 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. # app/schemas/payment_event.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 VasPaymentEventOut(BaseModel):
  7. id: int
  8. provider: str
  9. event_type: Optional[str]
  10. event_id: Optional[str]
  11. parsed_amount: Optional[int]
  12. parsed_currency: Optional[str]
  13. parsed_device: Optional[str]
  14. raw_payload: Optional[Dict[str, Any]] = None
  15. matched_payment_id: Optional[int]
  16. matched_order_id: Optional[str]
  17. status: str
  18. error_message: Optional[str]
  19. created_at: datetime
  20. @field_validator("raw_payload", mode="before")
  21. def normalize_json_field(cls, v):
  22. if v is None:
  23. return None
  24. if isinstance(v, str):
  25. try:
  26. return json.loads(v)
  27. except Exception:
  28. return {}
  29. return v
  30. model_config = {
  31. "from_attributes": True
  32. }