allOf and oneOf

This commit is contained in:
2026-07-12 01:19:03 +05:30
parent f1a7a556fd
commit 5da0a688a8
3 changed files with 196 additions and 9 deletions

View File

@@ -45,9 +45,8 @@ components:
x-order: 4
x-label: "Notes"
ProcedureNotes:
ProcedureNoteBase:
type: object
x-display-format: "{summary}"
properties:
summary:
type: string
@@ -58,6 +57,139 @@ components:
x-order: 2
x-label: "Details"
ProcedureNotes:
x-display-format: "{summary}"
oneOf:
- $ref: '#/components/schemas/BasicNote'
- $ref: '#/components/schemas/HeartRateNote'
- $ref: '#/components/schemas/DentalNote'
- $ref: '#/components/schemas/VaccineNote'
- $ref: '#/components/schemas/PreOpNote'
- $ref: '#/components/schemas/SurgeryNote'
discriminator:
propertyName: noteType
mapping:
basic: BasicNote
heart_rate: HeartRateNote
dental: DentalNote
vaccine: VaccineNote
preop: PreOpNote
surgery: SurgeryNote
BasicNote:
allOf:
- $ref: '#/components/schemas/ProcedureNoteBase'
- type: object
properties:
noteType:
type: string
enum: [basic]
x-order: 0
x-label: "Type"
required: [noteType]
HeartRateNote:
allOf:
- $ref: '#/components/schemas/ProcedureNoteBase'
- type: object
properties:
noteType:
type: string
enum: [heart_rate]
x-order: 0
x-label: "Type"
bpm:
type: integer
x-order: 3
x-label: "Heart Rate (bpm)"
required: [noteType, bpm]
DentalNote:
allOf:
- $ref: '#/components/schemas/ProcedureNoteBase'
- type: object
properties:
noteType:
type: string
enum: [dental]
x-order: 0
x-label: "Type"
procedureType:
type: string
enum: [scaling, polishing]
x-order: 3
x-label: "Procedure"
teeth:
type: string
enum: [all, upper_only, lower_only]
x-order: 4
x-label: "Teeth"
required: [noteType, procedureType]
VaccineNote:
allOf:
- $ref: '#/components/schemas/ProcedureNoteBase'
- type: object
properties:
noteType:
type: string
enum: [vaccine]
x-order: 0
x-label: "Type"
medicine:
type: string
enum: [Rabies, DHPP, Tricat, Deworming]
x-order: 3
x-label: "Medicine"
leg:
type: string
enum: [front_left, front_right, hind_left, hind_right]
x-order: 4
x-label: "Injection Leg"
required: [noteType, medicine, leg]
PreOpNote:
allOf:
- $ref: '#/components/schemas/ProcedureNoteBase'
- type: object
properties:
noteType:
type: string
enum: [preop]
x-order: 0
x-label: "Type"
heartRate:
type: integer
x-order: 3
x-label: "Heart Rate (bpm)"
temperature:
type: number
format: float
x-order: 4
x-label: "Temperature (°C)"
required: [noteType, heartRate, temperature]
SurgeryNote:
allOf:
- $ref: '#/components/schemas/ProcedureNoteBase'
- type: object
properties:
noteType:
type: string
enum: [surgery]
x-order: 0
x-label: "Type"
surgeryType:
type: string
enum: [neuter, spay]
x-order: 3
x-label: "Surgery Type"
complications:
type: string
x-order: 4
x-label: "Complications"
required: [noteType, surgeryType]
Call:
type: object
x-primary-key: _received_at