from datetime import datetime from typing import Optional from enum import Enum from pydantic import BaseModel class AppointmentStatus(str, Enum): SCHEDULED = "scheduled" CONFIRMED = "confirmed" COMPLETED = "completed" CANCELLED = "cancelled" NO_SHOW = "no_show" # Shared properties class AppointmentBase(BaseModel): appointment_datetime: Optional[datetime] = None duration_minutes: Optional[int] = 30 status: Optional[AppointmentStatus] = AppointmentStatus.SCHEDULED reason: Optional[str] = None notes: Optional[str] = None # Properties to receive via API on creation class AppointmentCreate(AppointmentBase): patient_id: int doctor_id: int appointment_datetime: datetime # Properties to receive via API on update class AppointmentUpdate(AppointmentBase): pass class AppointmentInDBBase(AppointmentBase): id: Optional[int] = None patient_id: int doctor_id: int created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class Config: from_attributes = True # Additional properties to return via API class Appointment(AppointmentInDBBase): pass # Additional properties stored in DB class AppointmentInDB(AppointmentInDBBase): pass