health-apps-cms/schemas/ResponseSchemas.py

200 lines
3.6 KiB
Python

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