from datetime import datetime from typing import Any, List, Optional from enums.enums import ClinicStatus from .BaseSchemas import * from pydantic import Field # Response schemas (used for API responses) class Clinic(ClinicBase): id: int create_time: datetime update_time: datetime status: ClinicStatus class Config: from_attributes = True class ClinicDoctorResponse(ClinicDoctorBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class SignupPricingMasterResponse(SignupPricingMasterBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class UserResponse(UserBase): id: int create_time: datetime update_time: datetime password: str = Field(exclude=True) created_clinics: Optional[List[Clinic]] = None class Config: from_attributes = True populate_by_name = True class Doctor(DoctorBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class Patient(PatientBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class AppointmentSchema(AppointmentBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class Calendar(CalendarBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True # custom schema for response class CalendarTimeSchema(BaseModel): time: str class Config: orm_mode = True class ClinicSchema(BaseModel): id: int name: str address: str phone: str email: str class Config: orm_mode = True # Detailed response schemas with nested relationships class ClinicWithDoctors(Clinic): doctors: List[Doctor] = [] class DoctorWithAppointments(Doctor): appointments: List[AppointmentSchema] = [] calendars: List[CalendarTimeSchema] = [] clinic: ClinicSchema class DoctorWithCalendar(Doctor): calendars: List[CalendarTimeSchema] = [] clinic: ClinicSchema class PatientWithAppointments(Patient): appointments: List[AppointmentSchema] = [] class AppointmentDetailed(AppointmentSchema): class Doctor(BaseModel): id: int name: str age: int email: str phone: str address: str class Config: orm_mode = True class Patient(BaseModel): id: int name: str age: int email: str phone: str address: str dob: str class Config: orm_mode = True doctor: Doctor patient: Patient class CallTranscriptsResponse(CallTranscriptsBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class NotificationResponse(NotificationBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class MasterAppointmentTypeResponse(MasterAppointmentTypeBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True class ClinicDoctorResponse(ClinicDoctorBase): id: int create_time: datetime update_time: datetime appointmentTypes: Optional[List[MasterAppointmentTypeResponse]] = [] class Config: orm_mode = True from_attributes = True allow_population_by_field_name = True class ClinicOfferResponse(ClinicOffersBase): id: int create_time: datetime update_time: datetime class Config: orm_mode = True