responses.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. from datetime import datetime
  2. from enum import Enum
  3. from pydantic import BaseModel, ConfigDict, EmailStr
  4. class BaseResponse(BaseModel):
  5. model_config = ConfigDict(from_attributes=True)
  6. class BaseObjectResponse(BaseResponse):
  7. id: str
  8. created_at: datetime
  9. updated_at: datetime
  10. class AccessTokenResponse(BaseResponse):
  11. token_type: str
  12. access_token: str
  13. expires_at: int
  14. issued_at: int
  15. refresh_token: str
  16. refresh_token_expires_at: int
  17. refresh_token_issued_at: int
  18. # ---- Organization ----
  19. class OrganizationResponse(BaseResponse):
  20. id: str
  21. name: str
  22. class MembershipUserResponse(BaseResponse):
  23. id: str
  24. email: EmailStr
  25. name: str
  26. class OrganizationMembershipResponse(BaseResponse):
  27. user_id: str
  28. organization_id: str
  29. role: str
  30. user: MembershipUserResponse
  31. class OrganizationDetailResponse(OrganizationResponse):
  32. name: str
  33. memberships: list[OrganizationMembershipResponse] = []
  34. class UserOrganizationResponse(BaseResponse):
  35. organization_id: str
  36. organization: OrganizationResponse
  37. role: str
  38. class UserResponse(BaseResponse):
  39. id: str
  40. email: EmailStr
  41. name: str
  42. phone_number: str | None = None
  43. global_role: str
  44. organizations: list[UserOrganizationResponse] = []
  45. class CommissionContactResponse(BaseResponse):
  46. name: str
  47. phone_number: str | None = None
  48. class CommissionResponse(BaseObjectResponse):
  49. name: str
  50. contacts: list[CommissionContactResponse] = []
  51. templates_id: list[str] = []
  52. # Commission model doesn't currently expose a hybrid `templates_id` --
  53. # add one alongside `contacts` on the model (mirrors the pattern already
  54. # used by SlotTemplate.tags_id / Volunteer.slots_id) if this is needed.
  55. class VolunteerGroupResponse(BaseObjectResponse):
  56. name: str
  57. color: str | None = None
  58. volunteers_id: list[str] = []
  59. class VolunteerResponse(BaseObjectResponse):
  60. name: str
  61. surname: str
  62. email: str
  63. phone_number: str
  64. automatic_sms: bool
  65. slots_id: list[str] = []
  66. groups_id: list[str] = []
  67. comment: str
  68. class SlotResponse(BaseObjectResponse):
  69. title: str
  70. starting_time: datetime
  71. ending_time: datetime
  72. required_volunteers: int
  73. volunteers_id: list[str] = []
  74. template_id: str | None
  75. class SMSResponse(BaseObjectResponse):
  76. volunteer_id: str | None
  77. content: str
  78. phone_number: str
  79. sending_time: datetime
  80. send_time: datetime | None
  81. class TemplateResponse(BaseObjectResponse):
  82. title: str
  83. description: str
  84. place: str
  85. responsible_override: str | None = None
  86. commission_id: str | None = None
  87. tags_id: list[str] = []
  88. comment: str
  89. class TagResponse(BaseObjectResponse):
  90. title: str
  91. templates_id: list[str] = []
  92. class ProjectResponse(BaseObjectResponse):
  93. name: str
  94. organization_id: str
  95. volunteers: list[VolunteerResponse]
  96. sms: list[SMSResponse]
  97. slots: list[SlotResponse]
  98. tags: list[TagResponse]
  99. templates: list[TemplateResponse]
  100. groups: list[VolunteerGroupResponse] = []
  101. is_public: bool
  102. class ProjectListResponse(BaseResponse):
  103. id: str
  104. created_at: datetime
  105. updated_at: datetime
  106. name: str
  107. organization_id: str
  108. is_public: bool
  109. class EnumServerStatus(Enum):
  110. ACTIVE = "active"
  111. INVALID = "invalid (heartbeat missing)"
  112. INACTIVE = "inactive (stale)"
  113. class SMSServerStatus(BaseResponse):
  114. updated_at: datetime
  115. host: str
  116. user_agent: str
  117. message: EnumServerStatus