package com.example.fercoganbackend.service; import com.example.fercoganbackend.entity.Rol; import com.example.fercoganbackend.entity.Usuario; import com.example.fercoganbackend.otros.ConfirmadoTF; 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; public List getAll(){ return repo.findAll(); } public UsuarioService(UsuarioRepository repo, PasswordEncoder encoder) { this.repo = repo; this.encoder = encoder; } public Usuario registrarUsuario(String username, String password, Set roles) { Usuario u = new Usuario(); u.setUsername(username); u.setPassword(encoder.encode(password)); u.setRoles(roles); u.setAprobado(false); // no aprobado hasta aceptación 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 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; } }