Class ProductService

java.lang.Object
com.proyecto.jpa.service.ProductService

@Service @Transactional(readOnly=true) public class ProductService extends Object
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 Details

    • ProductService

      @Autowired public ProductService(ProductRepository productRepository, CategoryRepository categoryRepository)
      Constructor con inyección de dependencias.
      Parameters:
      productRepository - repositorio de productos
      categoryRepository - repositorio de categorías
  • Method Details

    • findAll

      public List<Product> findAll()
      Obtiene todos los productos del sistema.
      Returns:
      lista de todos los productos
    • findById

      public Optional<Product> findById(Long id)
      Busca un producto por su ID.
      Parameters:
      id - el ID del producto
      Returns:
      un Optional con el producto si existe
    • findByCategoryId

      public List<Product> findByCategoryId(Long categoryId)
      Busca productos por categoría.
      Parameters:
      categoryId - el ID de la categoría
      Returns:
      lista de productos de esa categoría
    • findByNameContaining

      public List<Product> findByNameContaining(String name)
      Busca productos por nombre (búsqueda parcial, case-insensitive).
      Parameters:
      name - texto a buscar en el nombre
      Returns:
      lista de productos que coinciden
    • findByPriceRange

      public List<Product> findByPriceRange(BigDecimal minPrice, BigDecimal maxPrice)
      Busca productos en un rango de precios.
      Parameters:
      minPrice - precio mínimo
      maxPrice - precio máximo
      Returns:
      lista de productos en ese rango
    • findAvailableProducts

      public List<Product> findAvailableProducts()
      Busca productos con stock disponible.
      Returns:
      lista de productos con stock mayor a 0
    • findTopSellingProducts

      public List<Product> findTopSellingProducts(int limit)
      Obtiene los productos más vendidos.
      Parameters:
      limit - número de productos a retornar
      Returns:
      lista de productos más vendidos
    • save

      @Transactional public Product save(Product product)
      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

      @Transactional public Product updateStock(Long productId, Integer newStock)
      Actualiza el stock de un producto.
      Parameters:
      productId - el ID del producto
      newStock - el nuevo valor de stock
      Returns:
      el producto actualizado
      Throws:
      IllegalArgumentException - si el producto no existe o el stock es negativo
    • updatePrice

      @Transactional public Product updatePrice(Long productId, BigDecimal newPrice)
      Actualiza el precio de un producto.
      Parameters:
      productId - el ID del producto
      newPrice - el nuevo precio
      Returns:
      el producto actualizado
      Throws:
      IllegalArgumentException - si el producto no existe o el precio es inválido
    • deleteById

      @Transactional public void deleteById(Long id)
      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