104 lines
1.7 KiB
Python
104 lines
1.7 KiB
Python
from datetime import date, datetime
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class Metadata(BaseModel):
|
|
createdOn: datetime | None = None
|
|
updatedOn: datetime | None = None
|
|
|
|
|
|
class ParentBase(BaseModel):
|
|
name: str
|
|
email: str
|
|
phone: str | None = None
|
|
metadata: Metadata | None = None
|
|
|
|
|
|
class ParentCreate(ParentBase):
|
|
pass
|
|
|
|
|
|
class Parent(ParentBase):
|
|
id: int
|
|
|
|
|
|
class VetBase(BaseModel):
|
|
name: str
|
|
specialty: str | None = None
|
|
email: str
|
|
phone: str | None = None
|
|
metadata: Metadata | None = None
|
|
|
|
|
|
class VetCreate(VetBase):
|
|
pass
|
|
|
|
|
|
class Vet(VetBase):
|
|
id: int
|
|
|
|
|
|
class ProcedureNotes(BaseModel):
|
|
summary: str | None = None
|
|
details: str | None = None
|
|
|
|
|
|
class Procedure(BaseModel):
|
|
name: str | None = None
|
|
description: str | None = None
|
|
cost: float | None = None
|
|
notes: ProcedureNotes | None = None
|
|
|
|
|
|
class TreatmentBase(BaseModel):
|
|
label: str
|
|
description: str | None = None
|
|
metadata: Metadata | None = None
|
|
|
|
|
|
class TreatmentCreate(TreatmentBase):
|
|
pass
|
|
|
|
|
|
class Treatment(TreatmentBase):
|
|
id: int
|
|
|
|
|
|
class PetBase(BaseModel):
|
|
name: str
|
|
species: str
|
|
age: int | None = None
|
|
weight: float | None = None
|
|
birthDate: date | None = None
|
|
photo: str | None = None
|
|
metadata: Metadata | None = None
|
|
|
|
|
|
class PetCreate(PetBase):
|
|
parent_ids: list[int] = []
|
|
|
|
|
|
class Pet(PetBase):
|
|
id: int
|
|
parents: list[Parent] = []
|
|
|
|
|
|
class AppointmentBase(BaseModel):
|
|
date: datetime
|
|
notes: str | None = None
|
|
procedures: list[Procedure] = []
|
|
metadata: Metadata | None = None
|
|
|
|
|
|
class AppointmentCreate(AppointmentBase):
|
|
pet_id: int
|
|
vet_id: int
|
|
treatment_id: int
|
|
|
|
|
|
class Appointment(AppointmentBase):
|
|
id: int
|
|
pet: Pet
|
|
vet: Vet
|
|
treatment: Treatment
|