Este proyecto es una API REST creada con Spring Boot, diseñada como una herramienta de aprendizaje para trabajar con entidades, DTOs (Data Transfer Objects) y consultas personalizadas utilizando Query con INNER JOIN.
-
Entidades:
- Cliente
- DetalleVenta
- Producto
- Venta
-
Uso de DTOs:
- Los DTOs se utilizan para estructurar y simplificar los datos que se envían o reciben de las consultas.
-
Consultas personalizadas:
- Las consultas SQL personalizadas con INNER JOIN se implementan para obtener datos complejos que mapean directamente a los DTOs.
-
Lombok:
- Se utiliza Lombok para generar automáticamente los métodos por defecto, como getters, setters, constructores y métodos adicionales como
toStringyequals.
- Se utiliza Lombok para generar automáticamente los métodos por defecto, como getters, setters, constructores y métodos adicionales como
-
ORM:
- Se usa JPA/Hibernate como ORM para mapear las entidades a la base de datos de manera eficiente.
- Java
- Spring Boot (framework principal)
- JPA/Hibernate (mapeo de entidades y persistencia de datos)
- Lombok (simplificación del código boilerplate)
- MySQL (base de datos utilizada para desarrollo y pruebas)
- Maven (gestión de dependencias)
-
Clona este repositorio:
git clone https://github.com/Alexande6055/springSoa.git
-
Abre el proyecto en tu IDE favorito (por ejemplo, IntelliJ IDEA o Eclipse).
-
Asegúrate de tener configurado un entorno JDK compatible (Java 17 o superior recomendado).
-
Configura la conexión a la base de datos MySQL en el archivo
application.yml:Spring:
datasource: url: jdbc:mysql://localhost/tu_base_de_datos username: tu_usuario password: tu_contraseña
5. Ejecuta el proyecto:
```bash
mvn spring-boot:run
- Accede a la aplicación en
http://localhost:8080(puedes cambiar el puerto en el archivoapplication.propertiessi es necesario).
| Método HTTP | Endpoint | Descripción |
|---|---|---|
| GET | /venta/totalVentas |
Obtiene el total acumulado de las ventas realizadas. |
| GET | /venta/categoria={categoria} |
Devuelve las ventas filtradas por una categoría específica. |
| GET | /venta/detalleVenta={id_venta} |
Obtiene los detalles de una venta específica. |
| GET | /venta/clienteMasComprado |
Lista al cliente con mayores compras. |
-
Reporte de ventas totales:
@Query("SELECT SUM(dv.subTotal) AS total FROM DetalleVenta dv") Object reporteVentasTotales();
Descripción: Calcula el total de todas las ventas registradas.
-
Reporte de lista de detalle de venta por ID:
@Query("SELECT new com.gestionPlus.PracticaTienda.DTO.DetalleVentaDTO(dv.subTotal, dv.cantidad, p.precio, p.nombre, p.descripcion) " + "FROM DetalleVenta dv INNER JOIN Producto p ON dv.idProducto.id_producto = p.id_producto " + "WHERE dv.idVenta.id_venta = :id_venta") List<DetalleVentaDTO> reporteListaDetalleVenta(@Param("id_venta") Long id_venta);
Descripción: Genera un reporte con los detalles de un producto en una venta específica.
-
Cliente con más compras realizadas:
@Query("SELECT c.nombre, c.cedula, COUNT(v.idCliente.cedula) AS compras_realizadas " + "FROM Cliente c INNER JOIN Venta v ON c.cedula = v.idCliente.cedula " + "GROUP BY c.cedula ORDER BY compras_realizadas DESC LIMIT 1") List<Object> clienteConMasCompras();
Descripción: Encuentra al cliente con más compras realizadas, ordenando por la cantidad de compras.
-
Reporte de ventas por categoría:
@Query("SELECT new com.gestionPlus.PracticaTienda.DTO.VentaDTO(v.id_venta, v.fecha, v.categoria) " + "FROM Venta v WHERE v.categoria = :categoria") List<VentaDTO> reporteVentasPorCategoria(@Param("categoria") String categoria);
Descripción: Lista las ventas filtradas por una categoría específica.
src/
├── main/
│ ├── java/
│ │ └── com/gestionPlus/PracticaTienda/
│ │ ├── Controller/ # Controladores REST
│ │ ├── DTO/ # Data Transfer Objects
│ │ ├── Entity/ # Entidades JPA
│ │ ├── Repository/ # Interfaces de repositorio
│ │ ├── Service/ # Lógica de negocio
│ │ └── PracticaTiendaApplication.java
│ └── resources/
│ ├── application.properties # Configuración de la aplicación
│ ├── static/ # Archivos estáticos
│ └── templates/ # Plantillas Thymeleaf (si aplica)
└── test/
└── java/
└── com/gestionPlus/PracticaTienda/
Proyecto creado por Alexander Tasinchano.
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más información.