troov_session.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import json
  2. from pydantic import BaseModel, field_validator
  3. from typing import Optional, Any, Dict
  4. from datetime import datetime
  5. class TroovSessionBase(BaseModel):
  6. slot_date: str
  7. slot_time: str
  8. session_id: str
  9. source: str
  10. data: Optional[Dict[str, Any]] = None
  11. status: str = "pending"
  12. @field_validator("data", mode="before")
  13. def normalize_json_field(cls, v):
  14. if v is None:
  15. return None
  16. if isinstance(v, str):
  17. try:
  18. return json.loads(v)
  19. except Exception:
  20. return {}
  21. return v
  22. class TroovSessionCreate(TroovSessionBase):
  23. pass
  24. class TroovSessionUpdate(BaseModel):
  25. slot_date: Optional[str] = None
  26. slot_time: Optional[str] = None
  27. session_id: Optional[str] = None
  28. source: Optional[str] = None
  29. data: Optional[Dict[str, Any]] = None
  30. status: Optional[str] = None
  31. class TroovSessionOut(TroovSessionBase):
  32. created_at: datetime
  33. updated_at: datetime
  34. model_config = {
  35. "from_attributes": True
  36. }