PersonaService.java
package com.licensis.notaire.service;
import com.licensis.notaire.negocio.Persona;
import com.licensis.notaire.repository.PersonaRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
@Transactional
public class PersonaService {
private static final Logger logger = LoggerFactory.getLogger(PersonaService.class);
private final PersonaRepository personaRepository;
public PersonaService(PersonaRepository personaRepository) {
this.personaRepository = personaRepository;
}
@Transactional(readOnly = true)
public List<Persona> findAll() {
logger.debug("Finding all personas");
return personaRepository.findAll();
}
@Transactional(readOnly = true)
public Optional<Persona> findById(Integer id) {
logger.debug("Finding persona by id: {}", id);
return personaRepository.findById(id);
}
public Persona save(Persona entity) {
logger.info("Saving persona: {} {}", entity.getNombre(), entity.getApellido());
return personaRepository.save(entity);
}
public void deleteById(Integer id) {
logger.info("Deleting persona with id: {}", id);
personaRepository.deleteById(id);
}
@Transactional(readOnly = true)
public List<Persona> buscar(String nombre, String apellido, String numeroIdentificacion,
Integer idTipoIdentificacion, Boolean esCliente) {
logger.debug("Searching personas with filters - nombre: {}, apellido: {}, numeroIdentificacion: {}, "
+ "idTipoIdentificacion: {}, esCliente: {}", nombre, apellido, numeroIdentificacion,
idTipoIdentificacion, esCliente);
List<Persona> resultados = new ArrayList<>();
if (numeroIdentificacion != null && !numeroIdentificacion.isBlank()) {
Optional<Persona> persona = personaRepository.findByNumeroIdentificacion(numeroIdentificacion);
persona.ifPresent(resultados::add);
return resultados;
}
if (nombre != null && !nombre.isBlank() && apellido != null && !apellido.isBlank()) {
return personaRepository.findByNombreAndApellidoContainingIgnoreCase(nombre, apellido);
}
if (nombre != null && !nombre.isBlank()) {
resultados.addAll(personaRepository.findByNombreContainingIgnoreCase(nombre));
}
if (apellido != null && !apellido.isBlank()) {
resultados.addAll(personaRepository.findByApellidoContainingIgnoreCase(apellido));
}
if (idTipoIdentificacion != null) {
resultados.addAll(personaRepository.findByFkIdTipoIdentificacionIdTipoIdentificacion(idTipoIdentificacion));
}
if (esCliente != null) {
resultados.addAll(personaRepository.findByEsCliente(esCliente));
}
return resultados.stream().distinct().toList();
}
}