diff --git a/openapi_first/templates/vet_app/data.py b/openapi_first/templates/vet_app/data.py index bd6349f..593ce96 100644 --- a/openapi_first/templates/vet_app/data.py +++ b/openapi_first/templates/vet_app/data.py @@ -22,6 +22,7 @@ from models import ( Parent, ParentCreate, Vet, VetCreate, Treatment, TreatmentCreate, + Procedure, ProcedureNotes, Pet, PetCreate, Appointment, AppointmentCreate, ) @@ -158,6 +159,7 @@ def create_treatment(payload: TreatmentCreate) -> Treatment: id=_treatments_next_id, label=payload.label, description=payload.description, + procedures=payload.procedures, metadata={"createdOn": now, "updatedOn": now} if payload.metadata else None, ) _treatments[_treatments_next_id] = treatment @@ -174,6 +176,7 @@ def update_treatment(treatment_id: int, payload: TreatmentCreate) -> Treatment: id=treatment_id, label=payload.label, description=payload.description if payload.description is not None else current.description, + procedures=payload.procedures, metadata={"createdOn": current.metadata["createdOn"] if current.metadata else None, "updatedOn": now}, ) _treatments[treatment_id] = updated @@ -321,11 +324,21 @@ def _seed_data(): _vets[3] = Vet(id=3, name="Emily Davis", specialty="General Practice", email="emily@clinic.com", phone="555-0203", metadata=meta) _vets_next_id = 4 - _treatments[1] = Treatment(id=1, label="Annual Checkup", description="Full physical examination", metadata=meta) - _treatments[2] = Treatment(id=2, label="Vaccination", description="Core vaccines for common diseases", metadata=meta) - _treatments[3] = Treatment(id=3, label="Dental Cleaning", description="Scaling, polishing, and oral exam", metadata=meta) - _treatments[4] = Treatment(id=4, label="Spay/Neuter", description="Surgical sterilization", metadata=meta) - _treatments[5] = Treatment(id=5, label="Blood Panel", description="Complete blood count and chemistry", metadata=meta) + _treatments[1] = Treatment(id=1, label="Annual Checkup", description="Full physical examination", + procedures=[Procedure(name="Physical Exam", cost=50.0), Procedure(name="Heart Rate", notes=ProcedureNotes(summary="Normal rhythm"))], + metadata=meta) + _treatments[2] = Treatment(id=2, label="Vaccination", description="Core vaccines for common diseases", + procedures=[Procedure(name="DHPP Vaccine", cost=35.0), Procedure(name="Rabies Vaccine", cost=45.0)], + metadata=meta) + _treatments[3] = Treatment(id=3, label="Dental Cleaning", description="Scaling, polishing, and oral exam", + procedures=[Procedure(name="Scaling", cost=80.0), Procedure(name="Polishing", cost=40.0, notes=ProcedureNotes(summary="High-speed polish"))], + metadata=meta) + _treatments[4] = Treatment(id=4, label="Spay/Neuter", description="Surgical sterilization", + procedures=[Procedure(name="Pre-op Exam", cost=30.0), Procedure(name="Surgery", cost=200.0), Procedure(name="Post-op Care", cost=50.0)], + metadata=meta) + _treatments[5] = Treatment(id=5, label="Blood Panel", description="Complete blood count and chemistry", + procedures=[Procedure(name="CBC", cost=25.0), Procedure(name="Chemistry Panel", cost=60.0, notes=ProcedureNotes(summary="Fasting required"))], + metadata=meta) _treatments_next_id = 6 _pets[1] = Pet(id=1, name="Max", species="dog", age=4, weight=25.5, birthDate=date(2022, 3, 15), parents=[_parents[1]], metadata=meta) diff --git a/openapi_first/templates/vet_app/models.py b/openapi_first/templates/vet_app/models.py index bcaeb25..2895a82 100644 --- a/openapi_first/templates/vet_app/models.py +++ b/openapi_first/templates/vet_app/models.py @@ -38,9 +38,22 @@ 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 + procedures: list[Procedure] = [] metadata: Metadata | None = None diff --git a/openapi_first/templates/vet_app/openapi.yaml b/openapi_first/templates/vet_app/openapi.yaml index e8557f0..11675f4 100644 --- a/openapi_first/templates/vet_app/openapi.yaml +++ b/openapi_first/templates/vet_app/openapi.yaml @@ -23,6 +23,41 @@ components: type: string format: date-time + Procedure: + type: object + x-display-format: "{name} — ${cost}" + properties: + name: + type: string + x-order: 1 + x-label: "Procedure Name" + description: + type: string + x-order: 2 + x-label: "Description" + cost: + type: number + format: float + x-order: 3 + x-label: "Cost" + notes: + $ref: '#/components/schemas/ProcedureNotes' + x-order: 4 + x-label: "Notes" + + ProcedureNotes: + type: object + x-display-format: "{summary}" + properties: + summary: + type: string + x-order: 1 + x-label: "Summary" + details: + type: string + x-order: 2 + x-label: "Details" + Parent: type: object x-resource: parents @@ -131,6 +166,13 @@ components: x-order: 2 x-label: "Description" x-description: "Detailed description of the treatment" + procedures: + type: array + items: + $ref: '#/components/schemas/Procedure' + x-order: 3 + x-label: "Procedures" + x-description: "List of procedures performed during this treatment" metadata: $ref: '#/components/schemas/Metadata' x-order: 4