Recrear la DDBB con cada ejecución de los tests
[isfdt166-ansi-edi2-2024-server.git] / openapi / openapi.yaml
blob6307601c835c42d50748e79aad7d90fef4307b41
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                 mensaje: "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                 mensaje: "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                 mensaje: "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                 mensaje: "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       pattern: '^(\d{4})(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])T([0-1][0-9]|2[0-4])([0-5][0-9])([0-5][0-9])Z$'
408       description: "Formato personalizado de la fecha y hora del turno ('YYYYMMDDThhmmssZ')"
409       example: "20241231T245959Z"
411   # Propiedades
412   # -----------
414   assets:
416     Mensaje:
417       type: object
418       required:
419         - mensaje
420       properties:
421         mensaje:
422           type: string
424     Identificador:
425       type: object
426       required:
427         - id
428       properties:
429         id:
430           $ref: "#/components/primitives/Identificador"
432     Nombre:
433       type: object
434       required:
435         - nombre
436       properties:
437         nombre:
438           type: string
440     EspecieID:
441       type: object
442       required:
443         - especie_id
444       properties:
445         especie_id:
446           $ref: "#/components/primitives/Identificador"
448     MascotaID:
449       type: object
450       required:
451         - mascota_id
452       properties:
453         mascota_id:
454           $ref: "#/components/primitives/Identificador"
456     VeterinarioID:
457       type: object
458       required:
459         - veterinario_id
460       properties:
461         veterinario_id:
462           $ref: "#/components/primitives/Identificador"
464     Turno:
465       type: object
466       required:
467         - turno
468       properties:
469         turno:
470           $ref: "#/components/primitives/FechaHora"
472   # Esquemas
473   # --------
475   schemas:
477     Especie:
478       allOf:
479         - $ref: "#/components/assets/Identificador"
480         - $ref: "#/components/assets/Nombre"
482     Veterinario:
483       allOf:
484         - $ref: "#/components/assets/Identificador"
485         - $ref: "#/components/assets/Nombre"
487     Mascota:
488       allOf:
489         - $ref: "#/components/assets/Identificador"
490         - $ref: "#/components/assets/EspecieID"
491         - $ref: "#/components/assets/Nombre"
493     Turno:
494       allOf:
495         - $ref: "#/components/assets/Turno"
496         - $ref: "#/components/assets/MascotaID"
498     TurnoLista:
499       allOf:
500         - $ref: "#/components/schemas/Turno"
501         - $ref: "#/components/assets/VeterinarioID"
503   # Cuerpos de las solicitudes
504   # --------------------------
506   requestBodies:
508     Nombre:
509       $ref: "#/components/assets/Nombre"
511     Especie:
512       $ref: "#/components/assets/EspecieID"
514     Turno:
515       $ref: "#/components/schemas/Turno"