Class CustomerService

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

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

Implementa la lógica de negocio relacionada con los clientes, incluyendo validaciones de datos y gestión del estado del cliente.

Arquitectura de 3 Capas

 CustomerController (Capa de Presentación)
         ↓
 CustomerService (Capa de Negocio) ← Esta clase
         ↓
 CustomerRepository (Capa de Datos)
 

Operaciones en Cascada

Al eliminar un cliente, todos sus pedidos asociados se eliminan automáticamente gracias a la configuración de cascada en la entidad Customer.

Since:
1.0.0
Version:
1.0.0
Author:
Proyecto JPA
See Also:
  • Constructor Details

    • CustomerService

      @Autowired public CustomerService(CustomerRepository customerRepository)
      Constructor con inyección de dependencias.
      Parameters:
      customerRepository - repositorio de clientes
  • Method Details

    • findAll

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

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

      public Optional<Customer> findByEmail(String email)
      Busca un cliente por su email.
      Parameters:
      email - el email del cliente
      Returns:
      un Optional con el cliente si existe
    • findByStatus

      public List<Customer> findByStatus(Customer.CustomerStatus status)
      Busca clientes por estado.
      Parameters:
      status - el estado del cliente
      Returns:
      lista de clientes con ese estado
    • findActiveCustomers

      public List<Customer> findActiveCustomers()
      Busca clientes activos.
      Returns:
      lista de clientes con estado ACTIVE
    • searchByName

      public List<Customer> searchByName(String searchTerm)
      Busca clientes por nombre o apellido.
      Parameters:
      searchTerm - texto a buscar
      Returns:
      lista de clientes que coinciden
    • existsByEmail

      public boolean existsByEmail(String email)
      Verifica si existe un cliente con el email dado.
      Parameters:
      email - el email a verificar
      Returns:
      true si existe, false en caso contrario
    • save

      @Transactional public Customer save(Customer customer)
      Crea o actualiza un cliente.

      Valida que el cliente tenga datos obligatorios y email único.

      Parameters:
      customer - el cliente a guardar
      Returns:
      el cliente guardado
      Throws:
      IllegalArgumentException - si los datos son inválidos
    • updateStatus

      @Transactional public Customer updateStatus(Long customerId, Customer.CustomerStatus newStatus)
      Actualiza el estado de un cliente.
      Parameters:
      customerId - el ID del cliente
      newStatus - el nuevo estado
      Returns:
      el cliente actualizado
      Throws:
      IllegalArgumentException - si el cliente no existe
    • suspendCustomer

      @Transactional public Customer suspendCustomer(Long customerId)
      Suspende un cliente (cambia su estado a SUSPENDED).
      Parameters:
      customerId - el ID del cliente a suspender
      Returns:
      el cliente suspendido
    • activateCustomer

      @Transactional public Customer activateCustomer(Long customerId)
      Activa un cliente (cambia su estado a ACTIVE).
      Parameters:
      customerId - el ID del cliente a activar
      Returns:
      el cliente activado
    • deleteById

      @Transactional public void deleteById(Long id)
      Elimina un cliente por su ID.

      Operación en Cascada: Al eliminar el cliente, todos sus pedidos asociados se eliminarán automáticamente.

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

      public long count()
      Cuenta el número total de clientes.
      Returns:
      el número total de clientes