He creado la API utilizando FastAPI con las siguientes ampliaciones:
- Extensión de las listas con autores, objetos con sus operaciones CRUD, y que opcionalmente pueden ser añadidos a las listas, permitiendo filtrado de listas por autor.
- Diferenciación en las listas de compras y trabajos, con endpoints específicos para cada tipo.
Nota: También dejé la versión de Flask sin ampliaciones en la carpeta
flask-version-sin-ampliacion. Simplemente tiene el resultado de seguir la práctica, enfocando las ampliaciones en FastAPI.
- PUT /listas/{lista_id}: Actualiza el nombre de una lista específica.
- DELETE /listas/{lista_id}: Elimina una lista específica.
- GET /listas: Obtiene todas las listas o filtra por tipo (compras o trabajos).
- POST /listas/compras: Crea una nueva lista de compras.
- GET /listas/compras: Obtiene todas las listas de compras.
- GET /listas/compras/{lista_id}: Obtiene una lista de compras específica.
- POST /listas/trabajos: Crea una nueva lista de trabajo.
- GET /listas/trabajos: Obtiene todas las listas de trabajo.
- GET /listas/trabajos/{lista_id}: Obtiene una lista de trabajo específica.
- PUT /listas/trabajos/{lista_id}: Actualiza el nombre y la fecha límite de una lista de trabajo específica.
- POST /listas/{lista_id}/entradas: Añade una nueva entrada a una lista específica.
- GET /listas/{lista_id}/entradas: Obtiene todas las entradas de una lista específica.
- GET /listas/{lista_id}/entradas/{entrada_id}: Obtiene una entrada específica de una lista.
- PUT /listas/{lista_id}/entradas/{entrada_id}: Actualiza el texto de una entrada específica.
- DELETE /listas/{lista_id}/entradas/{entrada_id}: Elimina una entrada específica.
- POST /listas/compras/{lista_id}/entradas: Añade una nueva entrada con cantidad a una lista de compras específica.
- POST /autores: Crea un nuevo autor.
- GET /autores: Obtiene todos los autores.
- GET /autores/{autor_id}: Obtiene un autor específico.
- PUT /autores/{autor_id}: Actualiza el nombre de un autor específico.
- DELETE /autores/{autor_id}: Elimina un autor específico, con opción de eliminar también sus listas (booleano por query parameter)
- Ejemplo:
DELETE /autores/juanID?eliminar_listas=True
- Ejemplo:
- GET /autores/{autor_id}/listas: Obtiene todas las listas asociadas a un autor específico.