Este proyecto es una aplicación web desarrollada con Spring Boot para la gestión de suscripciones, usuarios, facturas y pagos. Permite a los usuarios registrarse, seleccionar planes de suscripción, gestionar sus perfiles y realizar pagos a través de diferentes métodos (PayPal, tarjeta de crédito, transferencia bancaria). Los administradores pueden gestionar usuarios, suscripciones y auditar cambios.
- Backend: Spring Boot 4.0.2
- Base de Datos: MySQL (producción), H2 (desarrollo/testing)
- ORM: Spring Data JPA con Hibernate
- Auditoría: Hibernate Envers
- Seguridad: Spring Security
- Vista: Thymeleaf
- Lenguaje: Java 21
- Build Tool: Maven
- Testing: JUnit 5, Mockito, AssertJ
- Otros: Lombok para reducción de boilerplate
- Java 21
- Maven 3.6+
- MySQL 8.0+ (para producción)
-
Clona el repositorio:
git clone <url-del-repositorio> cd ProyectoSpring
-
Configura la base de datos:
- Crea una base de datos MySQL llamada
proyecto_spring - Actualiza las credenciales en
src/main/resources/application.propertiesoapplication-dev.properties
- Crea una base de datos MySQL llamada
-
Ejecuta las migraciones de base de datos:
./mvnw flyway:migrate
-
Compila y ejecuta la aplicación:
./mvnw spring-boot:run
La aplicación estará disponible en http://localhost:8080
Configuración principal en src/main/resources/application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/proyecto_spring
spring.datasource.username=tu_usuario
spring.datasource.password=tu_password
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=trueConfiguración de desarrollo con H2:
spring.profiles.active=dev
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=truesrc/
├── main/
│ ├── java/com/example/ProyectoSpring/
│ │ ├── config/ # Configuraciones de Spring
│ │ ├── controllers/ # Controladores REST y MVC
│ │ ├── dtos/ # Data Transfer Objects
│ │ ├── entities/ # Entidades JPA
│ │ ├── enums/ # Enumeraciones
│ │ ├── repositories/ # Repositorios Spring Data
│ │ └── services/ # Lógica de negocio
│ └── resources/
│ ├── db/migration/ # Migraciones Flyway
│ ├── static/ # CSS, imágenes
│ └── templates/ # Plantillas Thymeleaf
└── test/ # Pruebas unitarias e integración
erDiagram
Usuario ||--o{ Suscripcion : tiene
Usuario ||--o{ Factura : genera
Usuario ||--o{ Pago : realiza
Usuario ||--|| Perfil : tiene
Plan ||--o{ Suscripcion : asignado
Plan ||--o{ Factura : facturado
Suscripcion ||--o{ Factura : genera
Factura ||--o{ Pago : pagado
Usuario {
Long id PK
String email UK
String nombre
String apellido
String password
LocalDateTime fechaRegistro
Boolean activo
String pais
Boolean isAdmin
}
Perfil {
Long id PK
Long usuarioId FK,UK
String empresa
String telefono
String direccion
String ciudad
String pais
String codigoPostal
}
Plan {
Long id PK
NivelPlan nivel UK
String nombre
String descripcion
BigDecimal precioMensual
Integer limiteFeatures
Boolean activo
}
Suscripcion {
Long id PK
Long usuarioId FK
Long planId FK
EstadoSuscripcion estado
LocalDateTime fechaInicio
LocalDateTime fechaRenovacion
LocalDateTime fechaCancelacion
LocalDateTime fechaProximoPago
}
Factura {
Long id PK
String numeroFactura UK
Long usuarioId FK
Long suscripcionId FK
Long planId FK
BigDecimal montoBase
BigDecimal montoProrrateo
BigDecimal tasaImpuesto
BigDecimal montoTotal
EstadoFactura estado
LocalDateTime fechaEmision
LocalDateTime fechaVencimiento
}
Pago {
Long id PK
Long usuarioId FK
Long facturaId FK
BigDecimal monto
LocalDateTime fechaPago
String referenciaTransaccion
Boolean procesado
String tipoPago
}
- Usuario: Representa a los usuarios del sistema
- Perfil: Información adicional del usuario (1:1 con Usuario)
- Plan: Planes de suscripción disponibles
- Suscripción: Vincula usuario con plan y estado
- Factura: Documentos de cobro generados
- Pago: Registros de pagos realizados (herencia para diferentes métodos)
Se han implementado pruebas unitarias e integración para los casos críticos del sistema utilizando JUnit 5, Mockito y AssertJ. Las pruebas cubren:
| Caso de Prueba | Resultado | Corrección |
|---|---|---|
| UsuarioServiceTest | ||
| Registrar usuario exitoso | ✅ Pasa | - |
| Registrar usuario con email duplicado | ✅ Pasa | - |
| Registrar usuario con contraseñas no coincidentes | ✅ Pasa | - |
| Obtener usuario por ID existente | ✅ Pasa | - |
| Obtener usuario por ID no existente | ✅ Pasa | - |
| Verificar existencia de email | ✅ Pasa | - |
| Desactivar usuario | ✅ Pasa | - |
| Desactivar usuario no existente | ✅ Pasa | - |
| SuscripcionServiceTest | ||
| Crear suscripción exitosa | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Crear suscripción usuario no existente | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Crear suscripción plan no existente | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Crear suscripción usuario ya tiene activa | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Obtener suscripción activa | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Cambiar plan exitoso | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Cambiar plan suscripción no existente | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Cambiar plan suscripción no activa | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Cancelar suscripción | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Cancelar suscripción no existente | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| FacturaServiceTest | ||
| Generar factura para suscripción | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Obtener factura por número | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Obtener facturas de usuario | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Obtener facturas pendientes | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Marcar factura como pagada | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Marcar factura no existente como pagada | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Buscar facturas por rango de fechas | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Buscar facturas por rango de montos | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| AuthControllerTest | ||
| Mostrar login sin autenticación | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Mostrar login con autenticación | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Mostrar registro sin autenticación | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Mostrar registro con autenticación | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Registrar usuario exitoso | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Registrar usuario con error | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
| Dashboard | ❌ Error de compilación | Pendiente: Resolver dependencias de Spring Boot Test |
- UsuarioService: 100% de métodos públicos probados (8/8 tests pasan)
- SuscripcionService: Pruebas implementadas pero con errores de compilación
- FacturaService: Pruebas implementadas pero con errores de compilación
- AuthController: Pruebas implementadas pero con errores de compilación
Las pruebas utilizan:
- Base de datos H2 en memoria para aislamiento
- Spring Boot Test para integración
- @Transactional para rollback automático
- AssertJ para assertions expresivas
- Mockito para mocking de dependencias
Estado Actual: Las pruebas de UsuarioService pasan completamente. Las demás clases de prueba tienen errores de compilación debido a dependencias de Spring Boot Test que necesitan resolución adicional. Se recomienda ejecutar ./mvnw dependency:resolve y verificar la configuración de Maven.
Para ejecutar las pruebas:
./mvnw testPara ejecutar solo las pruebas que pasan:
./mvnw test -Dtest=UsuarioServiceTest- Registro y Autenticación: Los usuarios pueden registrarse y autenticarse
- Gestión de Perfiles: Actualización de información personal
- Selección de Planes: Visualización y selección de planes de suscripción
- Gestión de Suscripciones: Cambio de plan, cancelación
- Facturación: Generación automática de facturas
- Pagos: Procesamiento de pagos por diferentes métodos
- Panel de Administración: Gestión de usuarios y auditoría
GET /- Página de inicioGET /login- Inicio de sesiónGET /registro- Registro de usuarioGET /dashboard- Panel de usuarioGET /planes- Lista de planesGET /suscripciones- Gestión de suscripcionesGET /facturas- Lista de facturasGET /admin/*- Panel de administración
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev./mvnw test./mvnw clean compile- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agrega nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Para preguntas o soporte, contacta al equipo de desarrollo.