Some checks failed
Deploy Spring Boot App / build-and-deploy (push) Has been cancelled
132 lines
4.8 KiB
Java
132 lines
4.8 KiB
Java
package com.example.fercoganbackend.service;
|
|
import com.example.fercoganbackend.controller.UserController;
|
|
import com.example.fercoganbackend.entity.Rol;
|
|
import com.example.fercoganbackend.entity.Roles;
|
|
import com.example.fercoganbackend.entity.Usuario;
|
|
import com.example.fercoganbackend.otros.ConfirmadoTF;
|
|
import com.example.fercoganbackend.repository.RolesRepository;
|
|
import com.example.fercoganbackend.repository.UsuarioRepository;
|
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
import org.springframework.stereotype.Service;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
|
|
@Service
|
|
public class UsuarioService {
|
|
private final UsuarioRepository repo;
|
|
private final PasswordEncoder encoder;
|
|
private final RolesRepository rolesRepository;
|
|
|
|
public List<Usuario> getAll(){
|
|
return repo.findAll();
|
|
}
|
|
public UsuarioService(UsuarioRepository repo, PasswordEncoder encoder, RolesRepository rolesRepository) {
|
|
this.repo = repo;
|
|
this.encoder = encoder;
|
|
this.rolesRepository = rolesRepository;
|
|
}
|
|
|
|
public Usuario registrarUsuario(String username, String password, Set<Rol> roles, Long rolId, Long ci, Long celular, String nombre) {
|
|
Roles rol = rolesRepository.findById(rolId)
|
|
.orElseThrow(() -> new RuntimeException("Rol no encontrado"));
|
|
Usuario u = new Usuario();
|
|
u.setUsername(username);
|
|
u.setPassword(encoder.encode(password));
|
|
u.setRoles(roles);
|
|
u.setRol(rol);
|
|
u.setAprobado(false); // no aprobado hasta aceptación
|
|
u.setCi(ci);
|
|
u.setCelular(celular);
|
|
u.setNombre(nombre);
|
|
return repo.save(u);
|
|
}
|
|
|
|
public Usuario actualizarUsuario(Long id, Usuario usuario) {
|
|
Usuario existente = repo.findById(id)
|
|
.orElseThrow(() -> new RuntimeException("Usuario no encontrado"));
|
|
|
|
existente.setUsername(usuario.getUsername());
|
|
existente.setPassword(encoder.encode(usuario.getPassword()));
|
|
existente.setRoles(usuario.getRoles());
|
|
existente.setAprobado(usuario.isAprobado());
|
|
existente.setVisible(usuario.getVisible());
|
|
|
|
return repo.save(existente); // <-- Aquí sí se actualiza el existente
|
|
}
|
|
|
|
public List<Usuario> listarPendientes() {
|
|
return repo.findAll().stream().filter(u -> !u.isAprobado()).toList();
|
|
}
|
|
|
|
public Usuario aceptarUsuario(Long id) {
|
|
Usuario u = repo.findById(id).orElseThrow();
|
|
u.setAprobado(true);
|
|
return repo.save(u);
|
|
}
|
|
|
|
public boolean estaAprobado(String username) {
|
|
return repo.findByUsername(username).map(Usuario::isAprobado).orElse(false);
|
|
}
|
|
public boolean estaRegistrado(String username) {
|
|
return repo.findByUsername(username).isPresent();
|
|
}
|
|
|
|
public ConfirmadoTF registradoYAprobado(String username){
|
|
ConfirmadoTF confirmadotf = new ConfirmadoTF();
|
|
confirmadotf.setAuthenticated(estaRegistrado(username));
|
|
confirmadotf.setConfirmed(estaAprobado(username));
|
|
return confirmadotf;
|
|
}
|
|
|
|
public void eliminarUsuario(Long id) {
|
|
if (!repo.existsById(id)) {
|
|
throw new RuntimeException("Usuario no encontrado");
|
|
}
|
|
repo.deleteById(id);
|
|
}
|
|
|
|
//encontrar el usuario por gmail
|
|
public Long findId(String username){
|
|
Usuario usuario = repo.findByUsername(username)
|
|
.orElseThrow(() -> new RuntimeException("Usuario no encontrado: " + username));
|
|
|
|
return usuario.getId();
|
|
}
|
|
|
|
public Long obtenerIdRolPorUsername(String username) {
|
|
return repo.findByUsername(username)
|
|
.map(usuario -> usuario.getRol().getId()) // Navega: Usuario -> Rol -> Id
|
|
.orElse(null); // O podrías lanzar una excepción si el usuario no existe
|
|
}
|
|
|
|
public Usuario actualizarParcial(Long id, UserController.UsuarioRequest request) {
|
|
// 1. Buscamos el usuario actual o lanzamos error si no existe
|
|
Usuario usuarioExistente = repo.findById(id)
|
|
.orElseThrow(() -> new RuntimeException("Usuario no encontrado"));
|
|
|
|
// 2. Actualizamos solo si el campo no es nulo
|
|
if (request.getUsername() != null) {
|
|
usuarioExistente.setUsername(request.getUsername());
|
|
}
|
|
|
|
if (request.getPassword() != null) {
|
|
// ¡No olvides encriptarla si cambias el password!
|
|
usuarioExistente.setPassword(request.getPassword());
|
|
}
|
|
|
|
if (request.getRol() != null) {
|
|
// Buscamos el objeto Rol por su ID (necesitas el RolesRepository)
|
|
Roles nuevoRol = rolesRepository.findById(request.getRol())
|
|
.orElseThrow(() -> new RuntimeException("El Rol especificado no existe"));
|
|
|
|
usuarioExistente.setRol(nuevoRol); // Asignamos el objeto completo
|
|
}
|
|
|
|
// 3. Guardamos los cambios
|
|
return repo.save(usuarioExistente);
|
|
}
|
|
|
|
|
|
|
|
}
|