Enunciado
Prueba Técnica: Desarrollo de API RESTful para "Artículos de Blog"
Objetivo
Desarrollar una API RESTful utilizando NestJS para gestionar "Artículos de Blog". La API debe interactuar con una base de datos MongoDB, permitir la subida de imágenes a AWS S3, y documentar los endpoints con Swagger. Además, se debe implementar un flujo de despliegue en Azure.
Requisitos Técnicos
Backend:
- Usar NestJS como framework principal.
- Implementar controladores, servicios y módulos siguiendo buenas prácticas.
- Conectar el proyecto a una base de datos MongoDB usando Mongoose.
Funcionalidad Principal:
- CRUD completo para los "Artículos de Blog":
- Campos del Artículo:
- title (string, requerido).
- content (string, requerido).
- author (string, requerido).
- image (string, URL de la imagen subida a S3).
- createdAt (fecha, por defecto la actual).
- updatedAt (fecha, se actualiza automáticamente en las modificaciones).
- Endpoints Requeridos:
- POST /articles: Crear un artículo (subida de imagen incluida).
- GET /articles: Listar todos los artículos con soporte de paginación, filtros y ordenamiento:
- Filtrar por autor usando ?author=nombre_autor.
- Ordenar por fecha de creación usando ?sort=asc|desc.
- Buscar por coincidencias en el título usando ?search=palabra.
- GET /articles/:id: Obtener un artículo por su ID.
- PUT /articles/:id: Actualizar un artículo por su ID.
- DELETE /articles/:id: Eliminar un artículo por su ID.
- Autenticación y Autorización:
-
Implementar autenticación basada en JWT.
-
Proteger los endpoints de escritura (crear, actualizar, eliminar) para que solo usuarios autenticados puedan acceder.
-
Incluir un endpoint de login:
-
POST /auth/login: Verificar credenciales de un usuario simulado:
{ "email": "[email protected]", "password": "password123" }
[](<https://lh7-rt.googleusercontent.com/docsz/AD_4nXc2S2RvGcweBIqjTZYsClLAqADDdml1nOKOWwXEB03z_w-U7jyzdWWTM_XjpsDFpD3n7fIt-98rLhW8-Osk1eBYgj5xVJzu9R4F9UVCvKYtHrVbPtEHLVrib9VqpGNBQFLbox18?key=IeqXXb8NrsnB7P5cc4-eaUkI>)
- El JWT debe incluir el email en el payload.
- Subida de Imágenes:
- Configurar un bucket en AWS S3 para subir imágenes.
- Al crear o actualizar un artículo, permitir la subida de una imagen y guardar la URL en el campo image del artículo.
- Validar que los archivos sean imágenes (jpg, png) y limitar el tamaño máximo.
Documentación:
- Usar Swagger para documentar todos los endpoints.
- Incluir en la documentación:
- Descripción de los endpoints.
- Ejemplos de solicitudes y respuestas.
- Códigos de estado HTTP esperados (200, 400, 404, 500).
Despliegue en Azure: