API RESTful completa desarrollada específicamente para entrenamiento en Testing y QA. Este proyecto está diseñado para ser probado, analizado, explorado y experimentado por profesionales de testing, estudiantes y desarrolladores que deseen practicar técnicas de pruebas de software.
Este proyecto fue desarrollado utilizando Claude (Anthropic) como herramienta de asistencia en la programación. La arquitectura, lógica de negocio y estructura fueron diseñadas mediante prompts iterativos, demostrando cómo la IA generativa puede acelerar el desarrollo de APIs complejas mientras se mantienen estándares profesionales de código y documentación.
- Autenticación JWT: Sistema seguro de login y registro
- Base de datos MySQL: Persistencia de datos con Sequelize ORM
- Paginación: Navegación eficiente de grandes conjuntos de datos
- Búsqueda de texto: Búsqueda avanzada por nombre, descripción y marca
- Manejo de imágenes: Subida y almacenamiento de imágenes de productos
- Agregar/quitar productos
- Actualizar cantidades
- Validación de stock en tiempo real
- Cálculo automático de totales
- Persistencia entre sesiones
- Calificaciones de 1 a 5 estrellas
- Comentarios detallados
- Reviews verificadas (solo compradores)
- Estadísticas por producto
- Marcar reviews como útiles
- Cupones de porcentaje y monto fijo
- Restricciones por categoría
- Límites de uso total y por usuario
- Compra mínima requerida
- Fechas de validez
- Estadísticas generales del negocio
- Reportes de ventas por período
- Inventario y stock bajo
- Análisis de clientes
- Productos más vendidos
- Ventas por categoría
- Guardar productos favoritos
- Notificaciones de stock
- Notificaciones de descuentos
- Cuerdas: Guitarras acústicas, eléctricas, bajos, violines, violonchelos, ukeleles, banjos, mandolinas
- Viento: Saxofones, trompetas, trombones, flautas, clarinetes, oboes, armónicas, acordeones, gaitas
- Teclas: Pianos digitales, teclados, sintetizadores, órganos, controladores MIDI
- Percusión: Baterías acústicas, electrónicas, cajones, congas, bongos, timbales, djembes, xilófonos, marimbas, platillos
- Música: Teoría musical, métodos instrumentales, historia de la música, biografías, producción audio
- Arte: Historia del arte, técnicas de pintura, dibujo, escultura, arte contemporáneo
- Técnicos: Programación, algoritmos, redes, machine learning, ciberseguridad
- Filosofía: Clásica, moderna, existencialismo, historia de la filosofía
- Ciencia: Física, biología, astronomía, química, neurociencia
- Novelas: Clásicas, fantasía, ciencia ficción, thriller, románticas, latinoamericanas
- Pinturas: Óleos, acrílicos, acuarelas, pasteles
- Herramientas: Pinceles, espátulas, paletas, caballetes
- Soportes: Lienzos, papeles especializados
- Accesorios: Lápices, carboncillos, rotuladores, gomas, barnices, médiums
git clone <tu-repo>
cd music-art-ecommerce-apinpm installCrea una base de datos en MySQL:
CREATE DATABASE music_art_store;Crea un archivo .env en la raíz:
PORT=3000
DB_HOST=localhost
DB_PORT=3306
DB_NAME=music_art_store
DB_USER=root
DB_PASSWORD=tu_password_mysql
JWT_SECRET=mi_super_secreto_jwt_2024_cambiar_en_produccion
UPLOAD_DIR=uploads
MAX_FILE_SIZE=5242880Asegúrate de tener todos estos archivos en la carpeta models/:
User.jsProduct.jsOrder.jsCart.jsReview.jsCoupon.jsWishlist.jsindex.js
npm run seedEsto creará:
- 3 usuarios (1 admin, 2 usuarios normales)
- 110+ productos en todas las categorías
- 5 cupones de descuento
npm run devEl servidor estará corriendo en http://localhost:3000
Accede a la documentación interactiva Swagger en:
http://localhost:3000/api-docs
La especificación completa de la API está disponible en formato OpenAPI 3.0:
- JSON:
docs/openapi.json - YAML:
docs/openapi.yaml - Documentación:
docs/README.md
Postman:
- Import → Upload Files → Selecciona
docs/openapi.json
Insomnia:
- Create → Import from File → Selecciona
docs/openapi.json
Swagger Editor:
- Abre https://editor.swagger.io/
- File → Import File → Selecciona
docs/openapi.json
npm run generate-contractAdministrador:
- Email:
admin@musicart.com - Password:
admin123
Usuario Normal:
- Email:
usuario@example.com - Password:
user123
BIENVENIDA- 10% de descuento (máx $20)VERANO2024- 15% de descuento (máx $50)ENVIOGRATIS- $10 de descuentoBLACKFRIDAY- 30% en instrumentos y arte (máx $100)LIBROS20- 20% en libros (máx $30)
POST /api/auth/register- Registrar usuarioPOST /api/auth/login- Iniciar sesiónGET /api/auth/me- Usuario actual
GET /api/products- Listar productos (paginación + búsqueda)GET /api/products/:id- Obtener productoPOST /api/products- Crear producto (admin)PUT /api/products/:id- Actualizar producto (admin)DELETE /api/products/:id- Eliminar producto (admin)POST /api/products/:id/upload-image- Subir imagen (admin)
GET /api/cart- Ver carritoPOST /api/cart/items- Agregar al carritoPUT /api/cart/items/:id- Actualizar cantidadDELETE /api/cart/items/:id- Eliminar del carritoDELETE /api/cart/clear- Vaciar carrito
GET /api/orders- Listar órdenesGET /api/orders/:id- Ver ordenPOST /api/orders- Crear ordenPATCH /api/orders/:id/status- Actualizar estado (admin)DELETE /api/orders/:id- Cancelar orden
GET /api/reviews/product/:id- Reviews de un productoPOST /api/reviews- Crear reviewPUT /api/reviews/:id- Actualizar reviewDELETE /api/reviews/:id- Eliminar reviewPOST /api/reviews/:id/helpful- Marcar como útil
GET /api/coupons- Listar cupones (admin)POST /api/coupons/validate- Validar cupónPOST /api/coupons- Crear cupón (admin)PUT /api/coupons/:id- Actualizar cupón (admin)DELETE /api/coupons/:id- Eliminar cupón (admin)
GET /api/dashboard/stats- Estadísticas generalesGET /api/dashboard/sales- Reporte de ventasGET /api/dashboard/inventory- Reporte de inventarioGET /api/dashboard/customers- Reporte de clientes
GET /api/wishlist- Ver wishlistPOST /api/wishlist- Agregar a wishlistDELETE /api/wishlist/:id- Eliminar de wishlistPATCH /api/wishlist/:id/notifications- Actualizar notificacionesDELETE /api/wishlist/clear/all- Vaciar wishlist
- Registrarse o iniciar sesión para obtener un token
- Incluir el token en las peticiones protegidas:
Authorization: Bearer tu_token_aqui# Login
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@musicart.com","password":"admin123"}'
# Usar el token
curl -X GET http://localhost:3000/api/cart \
-H "Authorization: Bearer TU_TOKEN_AQUI"Todos los endpoints de listado soportan paginación:
GET /api/products?page=1&limit=20Respuesta:
{
"products": [...],
"pagination": {
"total": 110,
"page": 1,
"limit": 20,
"totalPages": 6,
"hasNextPage": true,
"hasPrevPage": false
}
}Búsqueda avanzada en productos:
# Buscar "guitarra"
GET /api/products?search=guitarra
# Buscar en categoría específica
GET /api/products?search=yamaha&category=instrumento
# Buscar con rango de precio
GET /api/products?search=pintura&minPrice=20&maxPrice=100
# Combinar todo
GET /api/products?search=piano&category=instrumento&minPrice=400&maxPrice=800&page=1&limit=10Para subir una imagen de producto (solo admin):
Usando Postman:
- POST a
/api/products/:id/upload-image - Authorization: Bearer token
- Body: form-data
- Key:
image(tipo: File) - Value: selecciona tu archivo
Usando cURL:
curl -X POST http://localhost:3000/api/products/1/upload-image \
-H "Authorization: Bearer TU_TOKEN" \
-F "image=@/ruta/a/imagen.jpg"Formatos soportados: JPG, JPEG, PNG, GIF, WEBP
Tamaño máximo: 5MB
- Navegar productos
GET /api/products?category=instrumento&page=1&limit=10- Agregar al carrito
POST /api/cart/items
{
"productId": 1,
"quantity": 2
}- Ver carrito
GET /api/cart- Aplicar cupón (validar)
POST /api/coupons/validate
{
"code": "BIENVENIDA",
"amount": 100,
"categories": ["instrumento"]
}- Crear orden
POST /api/orders
{
"items": [
{"productId": 1, "quantity": 2},
{"productId": 5, "quantity": 1}
]
}- Dejar review
POST /api/reviews
{
"productId": 1,
"rating": 5,
"title": "Excelente guitarra",
"comment": "Sonido increíble y muy buena construcción"
}music-art-ecommerce-api/
├── config/
│ └── database.js
├── middleware/
│ ├── auth.js
│ └── upload.js
├── models/
│ ├── User.js
│ ├── Product.js
│ ├── Order.js
│ ├── Cart.js
│ ├── Review.js
│ ├── Coupon.js
│ ├── Wishlist.js
│ └── index.js
├── routes/
│ ├── auth.js
│ ├── products.js
│ ├── orders.js
│ ├── cart.js
│ ├── reviews.js
│ ├── coupons.js
│ ├── dashboard.js
│ └── wishlist.js
├── scripts/
│ └── seed.js
├── uploads/
├── .env
├── server.js
├── swagger.js
├── package.json
└── README.md
npm start # Iniciar en producción
npm run dev # Iniciar con nodemon (desarrollo)
npm run seed # Poblar base de datos- Total de productos: 110+
- Categorías principales: 3 (Instrumentos, Libros, Arte)
- Subcategorías: 50+
- Marcas: 40+
- ✅ Passwords encriptados con bcrypt
- ✅ Autenticación JWT
- ✅ Validación de datos con Sequelize
- ✅ Control de acceso por roles
- ✅ Protección contra inyección SQL
- ✅ Sanitización de inputs
MIT License - Este proyecto está disponible como código abierto bajo la licencia MIT, permitiendo su uso, modificación y distribución libre.
Nota: El correo de soporte listado en este proyecto (soporte@musicartstore.com) es ficticio y se utiliza únicamente con fines demostrativos. Para consultas reales sobre este proyecto, por favor utiliza el sistema de issues de GitHub.
Stack Tecnológico: Node.js | Express | MySQL | Sequelize ORM | JWT | Swagger/OpenAPI | Multer
Propósito: API de entrenamiento para Testing y QA
Año: 2025