Package com.proyecto.jpa.service
Class ProductService
java.lang.Object
com.proyecto.jpa.service.ProductService
Servicio para la gestión de productos (Capa de Negocio).
Implementa la lógica de negocio relacionada con los productos, incluyendo validaciones de stock, precios y relaciones con categorías.
Arquitectura de 3 Capas
ProductController (Capa de Presentación)
↓
ProductService (Capa de Negocio) ← Esta clase
↓
ProductRepository (Capa de Datos)
- Since:
- 1.0.0
- Version:
- 1.0.0
- Author:
- Proyecto JPA
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionProductService(ProductRepository productRepository, CategoryRepository categoryRepository) Constructor con inyección de dependencias. -
Method Summary
Modifier and TypeMethodDescriptionlongcount()Cuenta el número total de productos.voiddeleteById(Long id) Elimina un producto por su ID.findAll()Obtiene todos los productos del sistema.Busca productos con stock disponible.findByCategoryId(Long categoryId) Busca productos por categoría.Busca un producto por su ID.findByNameContaining(String name) Busca productos por nombre (búsqueda parcial, case-insensitive).findByPriceRange(BigDecimal minPrice, BigDecimal maxPrice) Busca productos en un rango de precios.findTopSellingProducts(int limit) Obtiene los productos más vendidos.Crea o actualiza un producto.updatePrice(Long productId, BigDecimal newPrice) Actualiza el precio de un producto.updateStock(Long productId, Integer newStock) Actualiza el stock de un producto.
-
Constructor Details
-
ProductService
@Autowired public ProductService(ProductRepository productRepository, CategoryRepository categoryRepository) Constructor con inyección de dependencias.- Parameters:
productRepository- repositorio de productoscategoryRepository- repositorio de categorías
-
-
Method Details
-
findAll
Obtiene todos los productos del sistema.- Returns:
- lista de todos los productos
-
findById
Busca un producto por su ID.- Parameters:
id- el ID del producto- Returns:
- un Optional con el producto si existe
-
findByCategoryId
Busca productos por categoría.- Parameters:
categoryId- el ID de la categoría- Returns:
- lista de productos de esa categoría
-
findByNameContaining
Busca productos por nombre (búsqueda parcial, case-insensitive).- Parameters:
name- texto a buscar en el nombre- Returns:
- lista de productos que coinciden
-
findByPriceRange
Busca productos en un rango de precios.- Parameters:
minPrice- precio mínimomaxPrice- precio máximo- Returns:
- lista de productos en ese rango
-
findAvailableProducts
Busca productos con stock disponible.- Returns:
- lista de productos con stock mayor a 0
-
findTopSellingProducts
Obtiene los productos más vendidos.- Parameters:
limit- número de productos a retornar- Returns:
- lista de productos más vendidos
-
save
Crea o actualiza un producto.Valida que el producto tenga nombre, precio positivo, stock no negativo y que la categoría exista.
- Parameters:
product- el producto a guardar- Returns:
- el producto guardado
- Throws:
IllegalArgumentException- si los datos son inválidos
-
updateStock
Actualiza el stock de un producto.- Parameters:
productId- el ID del productonewStock- el nuevo valor de stock- Returns:
- el producto actualizado
- Throws:
IllegalArgumentException- si el producto no existe o el stock es negativo
-
updatePrice
Actualiza el precio de un producto.- Parameters:
productId- el ID del productonewPrice- el nuevo precio- Returns:
- el producto actualizado
- Throws:
IllegalArgumentException- si el producto no existe o el precio es inválido
-
deleteById
Elimina un producto por su ID.- Parameters:
id- el ID del producto a eliminar- Throws:
IllegalArgumentException- si no existe un producto con ese ID
-
count
public long count()Cuenta el número total de productos.- Returns:
- el número total de productos
-