responses.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from enum import Enum
  2. from datetime import datetime
  3. from typing import Optional
  4. from pydantic import BaseModel, ConfigDict, EmailStr
  5. class BaseResponse(BaseModel):
  6. # may define additional fields or config shared across responses
  7. model_config = ConfigDict(from_attributes=True)
  8. class BaseObjectResponse(BaseResponse):
  9. id: str
  10. created_at: datetime
  11. updated_at: datetime
  12. class AccessTokenResponse(BaseResponse):
  13. token_type: str
  14. access_token: str
  15. expires_at: int
  16. issued_at: int
  17. refresh_token: str
  18. refresh_token_expires_at: int
  19. refresh_token_issued_at: int
  20. class UserResponse(BaseResponse):
  21. id: str
  22. email: EmailStr
  23. class VolunteerResponse(BaseObjectResponse):
  24. name: str
  25. surname: str
  26. email: str
  27. phone_number: str
  28. automatic_sms: bool
  29. slots_id: list[str] = []
  30. comment: str
  31. class SlotResponse(BaseObjectResponse):
  32. title: str
  33. starting_time: datetime
  34. ending_time: datetime
  35. required_volunteers: int
  36. volunteers_id: list[str] = []
  37. template_id: Optional[str]
  38. class SMSResponse(BaseObjectResponse):
  39. volunteer_id: Optional[str]
  40. content: str
  41. phone_number: str
  42. sending_time: datetime
  43. send_time: Optional[datetime]
  44. class TemplateResponse(BaseObjectResponse):
  45. title: str
  46. description: str
  47. place: str
  48. responsible_contact: str
  49. tags_id: list[str] = []
  50. comment: str
  51. class TagResponse(BaseObjectResponse):
  52. title: str
  53. templates_id: list[str] = []
  54. class ProjectResponse(BaseObjectResponse):
  55. name: str
  56. volunteers: list[VolunteerResponse]
  57. sms: list[SMSResponse]
  58. slots: list[SlotResponse]
  59. tags: list[TagResponse]
  60. templates: list[TemplateResponse]
  61. is_public: bool
  62. class ProjectListResponse(BaseResponse):
  63. id: str
  64. created_at: datetime
  65. updated_at: datetime
  66. name: str
  67. is_public: bool
  68. class EnumServerStatus(Enum):
  69. ACTIVE = "active"
  70. INVALID = "invalid (heartbeat missing)"
  71. INACTIVE = "inactive (stale)"
  72. class SMSServerStatus(BaseResponse):
  73. updated_at: datetime
  74. host: str
  75. user_agent: str
  76. message: EnumServerStatus