requests.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import datetime
  2. from typing import Literal
  3. from pydantic import UUID4, BaseModel, EmailStr, Field
  4. from app.models import OrgRole
  5. class BaseRequest(BaseModel):
  6. # may define additional fields or config shared across requests
  7. pass
  8. class RefreshTokenRequest(BaseRequest):
  9. refresh_token: str
  10. class UserCreateRequest(BaseRequest):
  11. email: EmailStr
  12. password: str
  13. name: str
  14. class UserUpdatePasswordRequest(BaseRequest):
  15. password: str
  16. class UserProfileUpdateRequest(BaseRequest):
  17. name: str | None = None
  18. phone_number: str | None = None
  19. class OrganizationRequest(BaseRequest):
  20. name: str
  21. class OrganizationMembershipCreateRequest(BaseRequest):
  22. """Adds an EXISTING user (by email) to an organization with a role.
  23. Does not create user accounts — see note below."""
  24. user_id: UUID4
  25. role: OrgRole
  26. class OrganizationMembershipUpdateRequest(BaseRequest):
  27. role: OrgRole
  28. class SmsCreateRequest(BaseRequest):
  29. volunteer_id: UUID4 | None = None
  30. phone_number: str
  31. content: str
  32. sending_time: datetime.datetime | None = None
  33. class SmsUpdateRequest(BaseRequest):
  34. volunteer_id: UUID4 | None = None
  35. phone_number: str | None = None
  36. content: str | None = None
  37. sending_time: datetime.datetime | None = None
  38. class ProjectCreateRequest(BaseRequest):
  39. organization_id: UUID4
  40. name: str
  41. is_public: bool = Field(
  42. default=False,
  43. description="Allow anyone to access the information about this project without login",
  44. )
  45. class ProjectUpdateRequest(BaseRequest):
  46. name: str
  47. is_public: bool = Field(
  48. default=False,
  49. description="Allow anyone to access the information about this project without login",
  50. )
  51. class ProjectImportGsheetRequest(BaseRequest):
  52. sheet_url: str
  53. satursday_date: datetime.datetime
  54. erase_data: bool | None = Field(default=False)
  55. class ProjectSMSBatchRequest(BaseRequest):
  56. template: str = Field(
  57. description="""Template to be use to create the SMS
  58. The placeholder that can be used in the template are
  59. - {titre} slot.title
  60. - {description} slot.description
  61. - {debut} slot.starting_time
  62. - {fin} slot.ending_ting
  63. - {respo} slot.responsible_contact
  64. - {prenom} volunteer.name
  65. - {nom} volunteer.surname""",
  66. examples=["Bonjour {prenom},\nTon créneau {titre} commence à {debut}.\nla com bénévole"],
  67. )
  68. delta_t: int = Field(
  69. default=10,
  70. description="Time in minutes that the sms need to be sent before the slot start",
  71. )
  72. class CommissionCreateRequest(BaseModel):
  73. name: str
  74. class CommissionUpdateRequest(BaseModel):
  75. name: str
  76. class CommissionMembershipRequest(BaseModel):
  77. user_ids: list[UUID4]
  78. class VolunteerCreateRequest(BaseRequest):
  79. name: str
  80. surname: str | None = Field(default="")
  81. email: EmailStr
  82. phone_number: str
  83. automatic_sms: bool = Field(default=True)
  84. slots: list[UUID4] | None = None
  85. comment: str | None = None
  86. class VolunteerUpdateRequest(BaseRequest):
  87. name: str | None = None
  88. surname: str | None = None
  89. email: str | None = None
  90. phone_number: str | None = None
  91. automatic_sms: bool | None = None
  92. slots: list[UUID4] | None = None
  93. comment: str | None = None
  94. class VolunteerGroupCreateRequest(BaseRequest):
  95. name: str
  96. color: str | None = None
  97. class VolunteerGroupUpdateRequest(BaseRequest):
  98. name: str
  99. color: str | None = None
  100. class GroupMembershipRequest(BaseRequest):
  101. volunteer_ids: list[UUID4]
  102. class GroupSmsRequest(BaseRequest):
  103. content: str
  104. class SlotCreateRequest(BaseRequest):
  105. title: str
  106. starting_time: datetime.datetime
  107. ending_time: datetime.datetime
  108. required_volunteers: int | None = 0
  109. volunteers: list[UUID4] | None = None
  110. template_id: UUID4 | None = None
  111. class SlotUpdateRequest(BaseRequest):
  112. title: str | None = None
  113. starting_time: datetime.datetime | None = None
  114. ending_time: datetime.datetime | None = None
  115. required_volunteers: int | None = None
  116. volunteers: list[UUID4] | None = None
  117. template_id: UUID4 | Literal[""] | None = None
  118. class TemplateCreateRequest(BaseRequest):
  119. title: str
  120. description: str | None = None
  121. place: str | None = None
  122. responsible_override: str | None = None
  123. tags: list[UUID4] | None = None
  124. comment: str | None = None
  125. commission_id: UUID4 | None = None
  126. class TemplateUpdateRequest(BaseRequest):
  127. title: str | None = None
  128. description: str | None = None
  129. place: str | None = None
  130. responsible_override: str | None = None
  131. # slots: Optional[list[UUID4]] = None
  132. tags: list[UUID4] | None = None
  133. comment: str | None = None
  134. commission_id: UUID4 | None = None
  135. class TagCreateRequest(BaseRequest):
  136. title: str
  137. templates: list[UUID4] | None = None
  138. class TagUpdateRequest(BaseRequest):
  139. title: str | None = None
  140. templates: list[UUID4] | None = None