Reutilizar componentes en la definición de parámetros
[isfdt166-ansi-edi2-2024-server.git] / openapi / openapi.yaml
blob4d8ada6c14ad022b453338576edd341621b00a18
1 openapi: 3.1.0
2 info:
3   title: "Sistema de Reservas de Turnos Veterinarios"
4   description: |
5     Esta API permite gestionar un sistema de mascotas, veterinarios y turnos.
6   version: "0.1"
8 # ------------------------------------------------
9 # Definición de rutas
10 # ------------------------------------------------
12 paths:
15   # Rutas para el manejo de especies
16   # --------------------------------
18   /especie:
20     post:
21       summary: "Crear una especie"
22       description: "Se agrega una especie animal al sistema"
23       operationId: "especie-crear"
24       requestBody:
25         required: true
26         content:
27           application/json:
28             schema:
29               $ref: "#/components/requestBodies/Nombre"
30       responses:
31         '200':
32           description: "Especie creada exitosamente"
33           content:
34             application/json:
35               schema:
36                 $ref: "#/components/schemas/Especie"
37         '403':
38           description: "Especie existente"
39           content:
40             application/json:
41               schema:
42                 $ref: "#/components/assets/Mensaje"
43               example:
44                 message: "La especie que intenta agregar ya existe"
45         '422':
46           description: "Solicitud invalida"
47           content:
48             application/json:
49               schema:
50                 $ref: "#/components/assets/Mensaje"
51               example:
52                 message: "Nombre de especie inválido"
54     get:
55       summary: "Listar las especies"
56       description: "Se listan las especies cargadas en el sistema."
57       operationId: "especie-listar"
58       responses:
59         '200':
60           description: "Lista de especies disponibles en el sistema"
61           content:
62             application/json:
63               schema:
64                 type: array
65                 items:
66                   $ref: "#/components/schemas/Especie"
68   /especie/{id}:
70     put:
71       summary: "Actualizar una especie"
72       description: "Se actualiza una especie del sistema"
73       operationId: "especie-editar"
74       parameters:
75         - name: id
76           in: path
77           description: "ID de la especie a actualizar"
78           required: true
79           schema:
80             $ref: "#/components/primitives/Identificador"
81             example: 1
82       requestBody:
83         required: true
84         content:
85           application/json:
86             schema:
87               $ref: "#/components/requestBodies/Nombre"
88       responses:
89         '200':
90           description: "Especie actualizada"
91           content:
92             application/json:
93               schema:
94                 $ref: "#/components/schemas/Especie"
95         '404':
96           description: "Especie no encontrada"
97           content:
98             application/json:
99               schema:
100                 $ref: "#/components/assets/Mensaje"
101               example:
102                 message: "ID invalido o inexistente"
104     delete:
105       summary: "Eliminar una especie"
106       description: "Se elimina una especie del sistema"
107       operationId: "especie-eliminar"
108       parameters:
109         - name: id
110           in: path
111           description: "ID de la especie a eliminar"
112           required: true
113           schema:
114             $ref: "#/components/primitives/Identificador"
115             example: 1
116       responses:
117         '200':
118           description: "Especie eliminada"
119           content:
120             application/json:
121               schema:
122                 $ref: "#/components/schemas/Especie"
123         '404':
124           description: "Especie no encontrada"
125           content:
126             application/json:
127               schema:
128                 $ref: "#/components/assets/Mensaje"
129               example:
130                 message: "ID invalido o inexistente"
133   # Rutas para el manejo de veterinarios
134   # ------------------------------------
136   /veterinario:
138     post:
139       summary: "Crear un veterinario"
140       description: "Se carga un veterinario en el sistema"
141       operationId: "veterinario-crear"
142       requestBody:
143         required: true
144         content:
145           application/json:
146             schema:
147               $ref: "#/components/requestBodies/Nombre"
148       responses:
149         '200':
150           description: "Veterinario creado exitosamente"
151           content:
152             application/json:
153               schema:
154                 $ref: "#/components/schemas/Veterinario"
156     get:
157       summary: "Listar los veterinarios"
158       description: "Permite listar los veterinarios cargados en el sistema."
159       operationId: "veterinario-listar"
160       responses:
161         '200':
162           description: "Lista de veterinarios disponibles en el sistema"
163           content:
164             application/json:
165               schema:
166                 type: array
167                 items:
168                   $ref: "#/components/schemas/Veterinario"
170   /veterinario/{id}:
172     put:
173       summary: "Actualiza un veterinario"
174       description: "Se actualiza un veterinario del sistema"
175       operationId: "veterinario-editar"
176       parameters:
177         - name: id
178           in: path
179           description: "ID del veterinario a actualizar"
180           required: true
181           schema:
182             $ref: "#/components/primitives/Identificador"
183             example: 1
184       requestBody:
185         required: true
186         content:
187           application/json:
188             schema:
189               $ref: "#/components/requestBodies/Nombre"
190       responses:
191         '200':
192           description: "Veterinario actualizado"
193           content:
194             application/json:
195               schema:
196                 $ref: "#/components/schemas/Veterinario"
198     delete:
199       summary: "Eliminar un veterinario"
200       description: "Se elimina un veterinario del sistema"
201       operationId: "veterinario-eliminar"
202       parameters:
203         - name: id
204           in: path
205           description: "ID del veterinario a eliminar"
206           required: true
207           schema:
208             $ref: "#/components/primitives/Identificador"
209             example: 1
210       responses:
211         '200':
212           description: "Veterinario eliminado"
213           content:
214             application/json:
215               schema:
216                 $ref: "#/components/schemas/Veterinario"
219   # Rutas para el manejo de mascotas
220   # --------------------------------
222   /mascota:
224     post:
225       summary: "Crea una mascota"
226       description: "Se carga una mascota al sistema"
227       operationId: "mascota-crear"
228       requestBody:
229         required: true
230         content:
231           application/json:
232             schema:
233               allOf:
234                 - $ref: "#/components/requestBodies/Especie"
235                 - $ref: "#/components/requestBodies/Nombre"
236       responses:
237         '200':
238           description: "Mascota creada exitosamente"
239           content:
240             application/json:
241               schema:
242                 $ref: "#/components/schemas/Mascota"
244     get:
245       summary: "Lisgtar las mascotas"
246       description: "Se listan las mascotas cargadas en el sistema."
247       operationId: "mascota-listar"
248       responses:
249         '200':
250           description: "Lista de mascotas cargadas en el sistema"
251           content:
252             application/json:
253               schema:
254                 type: array
255                 items:
256                   $ref: "#/components/schemas/Mascota"
258   /mascota/{id}:
260     put:
261       summary: "Actualizar una mascota"
262       description: "Se actualiza una mascota del sistema"
263       operationId: "mascota-editar"
264       parameters:
265         - name: id
266           in: path
267           description: "ID de la mascota a actualizar"
268           required: true
269           schema:
270             $ref: "#/components/primitives/Identificador"
271             example: 1
272       requestBody:
273         required: true
274         content:
275           application/json:
276             schema:
277               anyOf:
278                 - $ref: "#/components/requestBodies/Especie"
279                 - $ref: "#/components/requestBodies/Nombre"
280       responses:
281         '200':
282           description: "Mascota actualizada"
283           content:
284             application/json:
285               schema:
286                 $ref: "#/components/schemas/Mascota"
288     delete:
289       summary: "Eliminar una mascota"
290       description: "Se elimina una mascota del sistema"
291       operationId: "mascota-eliminar"
292       parameters:
293         - name: id
294           in: path
295           description: "ID de la mascota a eliminar"
296           required: true
297           schema:
298             $ref: "#/components/primitives/Identificador"
299             example: 1
300       responses:
301         '200':
302           description: "Mascota eliminada"
303           content:
304             application/json:
305               schema:
306                 $ref: "#/components/schemas/Mascota"
309   # Rutas para el manejo de turnos
310   # ------------------------------
312   /disponibles:
313     get:
314       summary: "Turnos disponibles"
315       description: "Lista de turnos disponibles"
316       operationId: "turno-disponibles"
317       responses:
318         '200':
319           description: "Lista de turnos disponibles"
320           content:
321             application/json:
322               schema:
323                 type: array
324                 items:
325                   $ref: "#/components/primitives/FechaHora"
327   /turno:
329     post:
330       summary: "Tomar un turno"
331       description: "Se toma un turno disponible"
332       operationId: "turno-crear"
333       requestBody:
334         required: true
335         content:
336           application/json:
337             schema:
338               $ref: "#/components/requestBodies/Turno"
339       responses:
340         '200':
341           description: "Turno asignado exitosamente"
342           content:
343             application/json:
344               schema:
345                 $ref: "#/components/schemas/Turno"
347     get:
348       summary: "Listar los turnos"
349       description: "Se listan los turnos asignados"
350       operationId: "turno-listar"
351       responses:
352         '200':
353           description: "Lista de turnos asignados"
354           content:
355             application/json:
356               schema:
357                 type: array
358                 items:
359                   $ref: "#/components/schemas/TurnoLista"
361   /turno/{turno}/{mascota_id}:
363     delete:
364       summary: "Libera un turno"
365       description: "Se libera un turno tomado en el sistema"
366       operationId: "turno-eliminar"
367       parameters:
368         - name: turno
369           in: path
370           description: "Fecha y hora del turno a liberar"
371           required: true
372           schema:
373             $ref: "#/components/primitives/FechaHora"
374         - name: mascota_id
375           in: path
376           description: "ID de la mascota asociada al turno a liberar"
377           required: true
378           schema:
379             $ref: "#/components/primitives/Identificador"
380             example: 1
381       responses:
382         '200':
383           description: "Turno liberado"
384           content:
385             application/json:
386               schema:
387                 $ref: "#/components/schemas/Turno"
389 # ------------------------------------------------
390 # Definición de componentes
391 # ------------------------------------------------
393 components:
395   # Tipos de datos
396   # --------------
398   primitives:
400     Identificador:
401       type: integer
402       format: int32
403       minimum: 1
405     FechaHora:
406       type: string
407       format: date-time
408       example: "1999-12-31T23:59:59Z"
410   # Propiedades
411   # -----------
413   assets:
415     Mensaje:
416       type: object
417       required:
418         - message
419       properties:
420         message:
421           type: string
423     Identificador:
424       type: object
425       required:
426         - id
427       properties:
428         id:
429           $ref: "#/components/primitives/Identificador"
431     Nombre:
432       type: object
433       required:
434         - nombre
435       properties:
436         nombre:
437           type: string
439     EspecieID:
440       type: object
441       required:
442         - especie_id
443       properties:
444         especie_id:
445           $ref: "#/components/primitives/Identificador"
447     MascotaID:
448       type: object
449       required:
450         - mascota_id
451       properties:
452         mascota_id:
453           $ref: "#/components/primitives/Identificador"
455     VeterinarioID:
456       type: object
457       required:
458         - veterinario_id
459       properties:
460         veterinario_id:
461           $ref: "#/components/primitives/Identificador"
463     Turno:
464       type: object
465       required:
466         - turno
467       properties:
468         turno:
469           $ref: "#/components/primitives/FechaHora"
471   # Esquemas
472   # --------
474   schemas:
476     Especie:
477       allOf:
478         - $ref: "#/components/assets/Identificador"
479         - $ref: "#/components/assets/Nombre"
481     Veterinario:
482       allOf:
483         - $ref: "#/components/assets/Identificador"
484         - $ref: "#/components/assets/Nombre"
486     Mascota:
487       allOf:
488         - $ref: "#/components/assets/Identificador"
489         - $ref: "#/components/assets/EspecieID"
490         - $ref: "#/components/assets/Nombre"
492     Turno:
493       allOf:
494         - $ref: "#/components/assets/Turno"
495         - $ref: "#/components/assets/MascotaID"
497     TurnoLista:
498       allOf:
499         - $ref: "#/components/schemas/Turno"
500         - $ref: "#/components/assets/VeterinarioID"
502   # Cuerpos de las solicitudes
503   # --------------------------
505   requestBodies:
507     Nombre:
508       $ref: "#/components/assets/Nombre"
510     Especie:
511       $ref: "#/components/assets/EspecieID"
513     Turno:
514       $ref: "#/components/schemas/Turno"