Backend para gestión y consulta de cartas de Magic: The Gathering usando la API pública de Scryfall y MongoDB.
- NestJS (TypeScript)
- MongoDB (Mongoose)
- Docker
- Swagger (OpenAPI)
- Jest (testing)
- Docker y Docker Compose
- Node.js >= 18
- pnpm (recomendado) o npm/yarn
pnpm install # o npm install / yarn installCopia el archivo .env.example a .env y ajusta las variables según tu entorno.
docker compose up -dpnpm run start:dev # o npm run start:devGET /cards/search— Buscar cartas por campos avanzadosPOST /cards/save— Guardar cartas por IDs de ScryfallPATCH /cards/:id— Modificar carta existente por ID
curl "http://localhost:3000/cards/search?name=Black%20Lotus"curl -X POST http://localhost:3000/cards/save -H "Content-Type: application/json" -d '{"card_ids": ["id1", "id2"]}'curl -X PATCH http://localhost:3000/cards/{id} -H "Content-Type: application/json" -d '{"name": "Nuevo nombre"}'{
"result": [
{ "id": "id1", "status": "Guardada" },
{ "id": "id2", "error": "Ya existe en la base de datos" }
],
"stats": {
"guardadas": 1,
"ya_existian": 1,
"no_encontradas": 0
}
}pnpm run test # o npm run testpnpm run test:cov # o npm run test:covsrc/cards/— Módulo principal de cartas (servicio, controlador, DTOs, entidades, integración Scryfall)src/cards/dto/— DTOs y validacionessrc/cards/interfaces/— Interfaces y tipado fuertetest/— Pruebas end-to-end.github/instructions/— Instrucciones y documentación técnica
- NestJS — Framework backend Node.js
- MongoDB — Base de datos NoSQL
- Mongoose — ODM para MongoDB
- Docker — Contenedores y base de datos local
- Swagger — Documentación interactiva de la API
- Jest — Testing unitario
- pnpm — Gestor de paquetes rápido
graph TD;
Cliente--->API[NestJS API]
API--->MongoDB[(MongoDB)]
API--->Scryfall[Scryfall API]
- Separación estricta de lógica de negocio y controladores
- Validación exhaustiva con DTOs y class-validator
- Rate limiting manual para Scryfall
- Respuestas y manejo de errores claros
- Documentación y ejemplos en Swagger
- Testing unitario con mocks para dependencias externas
- Logs estructurados con Winston: Implementar Winston para logging avanzado, niveles de log, persistencia y trazabilidad.
- Cache con Redis: Añadir cacheo de respuestas frecuentes (por ejemplo, búsquedas a Scryfall) usando Redis para mejorar el rendimiento y reducir llamadas externas.
- Autenticación y autorización: Proteger endpoints sensibles con JWT, Guards o similar.
- Rate limiting global: Mejorar el rate limiting usando librerías como
@nestjs/throttler. - Monitorización y métricas: Integrar herramientas como Prometheus, Grafana o Sentry para monitoreo y alertas.
- Pruebas e2e más exhaustivas: Ampliar los tests end-to-end y mocks de dependencias externas.


