from datetime import datetime from typing import Optional from pydantic import BaseModel, EmailStr class BaseResponse(BaseModel): # may define additional fields or config shared across responses class Config: orm_mode = True class AccessTokenResponse(BaseResponse): token_type: str access_token: str expires_at: int issued_at: int refresh_token: str refresh_token_expires_at: int refresh_token_issued_at: int class UserResponse(BaseResponse): id: str email: EmailStr class SmsResponse(BaseResponse): id: str created_at: datetime updated_at: datetime phone_number: str sending_time: datetime send_time: datetime class VolunteerResponse(BaseResponse): id: str created_at: datetime updated_at: datetime name: str surname: str email: str phone_number: str automatic_sms: bool slots_id: list[str] = [] class SlotResponse(BaseResponse): id: str created_at: datetime updated_at: datetime title: str description: str starting_time: datetime ending_time: datetime volunteers_id: list[str] = [] class SMSResponse(BaseResponse): id: str created_at: datetime updated_at: datetime volunteer_id: Optional[str] content: str phone_number: str sending_time: datetime send_time: Optional[datetime] class ProjectResponse(BaseResponse): id: str created_at: datetime updated_at: datetime name: str volunteers: list[VolunteerResponse] sms: list[SMSResponse] slots: list[SlotResponse] class ProjectListResponse(BaseResponse): id: str created_at: datetime updated_at: datetime name: str