import datetime from typing import Optional from pydantic import UUID4, BaseModel, EmailStr, Field class BaseRequest(BaseModel): # may define additional fields or config shared across requests pass class RefreshTokenRequest(BaseRequest): refresh_token: str class UserUpdatePasswordRequest(BaseRequest): password: str class UserCreateRequest(BaseRequest): email: EmailStr password: str class SmsCreateRequest(BaseRequest): volunteer_id: Optional[UUID4] = None phone_number: str content: str sending_time: Optional[datetime.datetime] = None class SmsUpdateRequest(BaseRequest): volunteer_id: Optional[UUID4] = None phone_number: Optional[str] = None content: Optional[str] = None sending_time: Optional[datetime.datetime] = None class ProjectRequest(BaseRequest): name: str is_public: bool = Field( default=False, description="Allow anyone to access the information about this project without login", ) class ProjectImportGsheetRequest(BaseRequest): sheet_url: str satursday_date: datetime.datetime erase_data: Optional[bool] = Field(default=False) class ProjectSMSBatchRequest(BaseRequest): template: str = Field( description="""Template to be use to create the SMS The placeholder that can be used in the template are - {titre} slot.title - {description} slot.description - {debut} slot.starting_time - {fin} slot.ending_ting - {respo} slot.responsible_contact - {prenom} volunteer.name - {nom} volunteer.surname""", examples=["Bonjour {prenom},\nTon créneau {titre} commence à {debut}.\nla com bénévole"], ) delta_t: int = Field( default=10, description="Time in minutes that the sms need to be sent before the slot start", ) class VolunteerCreateRequest(BaseRequest): name: str surname: Optional[str] = Field(default="") email: EmailStr phone_number: str automatic_sms: bool = Field(default=True) slots: Optional[list[UUID4]] = None class VolunteerUpdateRequest(BaseRequest): name: Optional[str] = None surname: Optional[str] = None email: Optional[str] = None phone_number: Optional[str] = None automatic_sms: Optional[bool] = None slots: Optional[list[UUID4]] = None class SlotCreateRequest(BaseRequest): title: str starting_time: datetime.datetime ending_time: datetime.datetime volunteers: Optional[list[UUID4]] = None template_id: Optional[UUID4] = None class SlotUpdateRequest(BaseRequest): title: Optional[str] = None starting_time: Optional[datetime.datetime] = None ending_time: Optional[datetime.datetime] = None volunteers: Optional[list[UUID4]] = None template_id: Optional[UUID4] = None class TemplateCreateRequest(BaseRequest): title: str description: Optional[str] = None place: Optional[str] = None responsible_contact: Optional[str] = None tags: Optional[list[UUID4]] = None class TemplateUpdateRequest(BaseRequest): title: Optional[str] = None description: Optional[str] = None place: Optional[str] = None responsible_contact: Optional[str] = None # slots: Optional[list[UUID4]] = None tags: Optional[list[UUID4]] = None class TagCreateRequest(BaseRequest): title: str templates: Optional[list[UUID4]] = None class TagUpdateRequest(BaseRequest): title: Optional[str] = None templates: Optional[list[UUID4]] = None