Class OrderItemService

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

@Service @Transactional(readOnly=true) public class OrderItemService extends Object
Servicio para la gestión de items de pedidos (Capa de Negocio).

Implementa la lógica de negocio relacionada con los items de pedidos, incluyendo validaciones de stock, cálculo de subtotales y gestión de cantidades.

Arquitectura de 3 Capas

 OrderItemController (Capa de Presentación)
         ↓
 OrderItemService (Capa de Negocio) ← Esta clase
         ↓
 OrderItemRepository (Capa de Datos)
 

Responsabilidades

  • Gestionar items de pedidos
  • Calcular subtotales automáticamente
  • Validar cantidades y precios
  • Verificar disponibilidad de productos
  • Actualizar totales de pedidos
Since:
1.0.0
Version:
1.0.0
Author:
Proyecto JPA
See Also:
  • Constructor Details

    • OrderItemService

      @Autowired public OrderItemService(OrderItemRepository orderItemRepository, OrderRepository orderRepository, ProductRepository productRepository)
      Constructor con inyección de dependencias.
      Parameters:
      orderItemRepository - repositorio de items de pedidos
      orderRepository - repositorio de pedidos
      productRepository - repositorio de productos
  • Method Details

    • findAll

      public List<OrderItem> findAll()
      Obtiene todos los items de pedidos del sistema.
      Returns:
      lista de todos los items de pedidos
    • findById

      public Optional<OrderItem> findById(Long id)
      Busca un item de pedido por su ID.
      Parameters:
      id - el ID del item de pedido
      Returns:
      un Optional con el item si existe
    • findByOrderId

      public List<OrderItem> findByOrderId(Long orderId)
      Busca todos los items de un pedido específico.
      Parameters:
      orderId - el ID del pedido
      Returns:
      lista de items del pedido
    • findByProductId

      public List<OrderItem> findByProductId(Long productId)
      Busca todos los items que contienen un producto específico.
      Parameters:
      productId - el ID del producto
      Returns:
      lista de items con ese producto
    • save

      @Transactional public OrderItem save(OrderItem orderItem)
      Crea o actualiza un item de pedido.

      Valida la cantidad, el precio, calcula el subtotal automáticamente y actualiza el total del pedido.

      Parameters:
      orderItem - el item de pedido a guardar
      Returns:
      el item de pedido guardado
      Throws:
      IllegalArgumentException - si los datos son inválidos
    • updateQuantity

      @Transactional public OrderItem updateQuantity(Long orderItemId, Integer newQuantity)
      Actualiza la cantidad de un item de pedido.
      Parameters:
      orderItemId - el ID del item
      newQuantity - la nueva cantidad
      Returns:
      el item actualizado
      Throws:
      IllegalArgumentException - si el item no existe o la cantidad es inválida
    • deleteById

      @Transactional public void deleteById(Long id)
      Elimina un item de pedido por su ID.

      Al eliminar el item, se actualiza automáticamente el total del pedido.

      Parameters:
      id - el ID del item a eliminar
      Throws:
      IllegalArgumentException - si no existe un item con ese ID
    • calculateSubtotal

      public BigDecimal calculateSubtotal(Integer quantity, BigDecimal unitPrice)
      Calcula el subtotal de un item basado en cantidad y precio unitario.
      Parameters:
      quantity - la cantidad
      unitPrice - el precio unitario
      Returns:
      el subtotal calculado
    • count

      public long count()
      Cuenta el número total de items de pedidos.
      Returns:
      el número total de items
    • countByOrderId

      public long countByOrderId(Long orderId)
      Cuenta el número de items en un pedido específico.
      Parameters:
      orderId - el ID del pedido
      Returns:
      el número de items en ese pedido