Aplicación de comercio electrónico desarrollada con Java y Spring Boot. El proyecto evoluciona el backend de gestión de usuarios, artículos y compras hacia una aplicación persistente con Spring Data JPA, MySQL y una interfaz interactiva basada en Spring Shell.
Fue desarrollado de forma colaborativa por Alejandro Corona Ballester y Mario Reyes Morales como proyecto académico.
Aunque el repositorio se denomina
ECommerce-API-SpringBoot, la interfaz disponible actualmente es una aplicación de terminal basada en Spring Shell. No expone endpoints HTTP REST.
- Creación y listado de usuarios.
- Validación del nombre y del correo electrónico.
- Detección de correos duplicados.
- Creación, consulta, listado y eliminación de artículos.
- Gestión de artículos con nombre, precio, categoría y fecha de registro.
- Creación de compras asociadas a un usuario y a un artículo.
- Consulta de compras por usuario.
- Consulta de compras relacionadas con un artículo.
- Consulta y eliminación de compras.
- Cálculo del precio total de las compras.
- Descuento por cantidad en las líneas de compra.
- Descuento adicional para compras cuyo importe supera los 100 euros.
- Carga automática de datos iniciales mediante
ShopSeeder. - Comandos interactivos con ayuda integrada.
- Java 21
- Spring Boot 3.5.7
- Spring Data JPA
- Spring Shell
- MySQL para el entorno principal
- H2 para las pruebas
- Maven
- Jakarta Validation
- Lombok
- JUnit 5, Spring Boot Test y Mockito
- Log4j 2
La aplicación está organizada en varias capas:
- Aplicación:
AppShopinicia Spring Boot y activa el escaneo de comandos. - Modelos: entidades JPA
User,Article,OrderyShoppingLine. - Repositorios: interfaces Spring Data JPA para persistir y consultar las entidades.
- Servicios:
UserService,ArticleServiceyOrderServiceconcentran las reglas de negocio. - Presentación: comandos Spring Shell para operar con usuarios, artículos y compras desde la terminal.
- Validación:
ValidationHandlerejecuta las restricciones de Jakarta Validation antes de guardar entidades. - Inicialización:
ShopSeedercrea datos de ejemplo al arrancar la aplicación.
El flujo principal comienza en AppShop, que arranca el contexto de Spring. Spring registra los comandos de UserCommand, ArticleCommand y OrderCommand. Estos comandos delegan las operaciones en los servicios, que utilizan repositorios JPA para acceder a la base de datos.
Una vez iniciada la aplicación, Spring Shell permite consultar todos los comandos con:
help
create-user --email usuario@example.com --name "Nombre del usuario"
list-users
create-article --name "Producto" --price 19.99 --category "Categoría"
read-article --id 1
delete-article --id 1
list-articles
create-order --id 1 --product 1 --quantity 2
list-orders
list-orders-by-user --id 1
list-orders-by-article --id 1
read-order --id 1
delete-order --id 1
Los identificadores utilizados en los comandos corresponden a los registros existentes en la base de datos.
- JDK 21.
- Maven.
- MySQL para ejecutar la aplicación principal.
- IntelliJ IDEA u otro IDE compatible con Maven.
La configuración por defecto utiliza una base de datos MySQL local:
jdbc:mysql://localhost:3306/poodb
El usuario y la contraseña se pueden configurar mediante variables de entorno:
DB_USERNAME=root
DB_PASSWORD=rootLa base de datos poodb debe existir antes de iniciar la aplicación. El esquema se genera automáticamente al arrancar mediante spring.jpa.hibernate.ddl-auto: create.
La aplicación contiene datos iniciales de ejemplo con dos usuarios, tres artículos y dos compras. Como el esquema se recrea al iniciar, los datos persistidos anteriores se sustituyen en cada ejecución.
Las pruebas utilizan una base de datos H2 en memoria y no requieren una instalación local de MySQL.
Clonar el repositorio:
git clone https://github.com/mario-reyes-morales/ECommerce-API-SpringBoot.git
cd ECommerce-API-SpringBootEjecutar las pruebas:
mvn clean testIniciar la aplicación:
mvn spring-boot:runTambién se puede ejecutar la clase principal upm.app.AppShop desde IntelliJ IDEA.
src/
main/
java/upm/app/
app/ punto de entrada de Spring Boot
data/
models/ entidades JPA y excepciones de dominio
repositories/ repositorios y datos iniciales
presentation/ comandos Spring Shell y validación
services/ reglas de negocio y excepciones
resources/
application.yml configuración de MySQL y Spring Shell
test/
java/upm/app/ pruebas de servicios y comandos
resources/ perfil de pruebas con H2
pom.xml configuración de Maven
LICENSE.md licencia del proyecto, si está incluida
El proyecto incluye pruebas de integración con @SpringBootTest para comprobar, entre otros casos:
- creación y listado de usuarios;
- rechazo de usuarios con correo duplicado;
- creación de compras;
- errores cuando no existe el usuario o el artículo solicitado;
- búsqueda de compras por usuario;
- funcionamiento de los comandos de Spring Shell.
- Alejandro Corona Ballester
- Mario Reyes Morales
El proyecto se desarrolló de forma colaborativa, compartiendo el análisis, el diseño, la implementación, las pruebas y la documentación.