requests.py 5.3 KB

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