auth listo y contador terminados

This commit is contained in:
2025-09-10 17:36:04 -04:00
commit bdefcf5162
21 changed files with 1090 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
package com.example.fercoganbackend.service;
// ContadorService.java
import org.springframework.stereotype.Service;
import java.util.concurrent.atomic.AtomicInteger;
@Service
public class ContadorService {
private final AtomicInteger contador = new AtomicInteger(200);
private boolean sw = true;
public int incrementar() {
int valorActual = contador.get();
int incremento;
if (valorActual < 300) {
incremento = sw ? 20 : 30;
sw = !sw; // alterna el booleano
} else if (valorActual < 1000) {
incremento = 50;
} else if (valorActual < 2000) {
incremento = 100;
} else {
incremento = 500;
}
return contador.getAndAdd(incremento);
}
public int getContador() {
return contador.get();
}
}

View File

@@ -0,0 +1,47 @@
package com.example.fercoganbackend.service;
import com.example.fercoganbackend.entity.Usuario;
import com.example.fercoganbackend.otros.UsuarioPrincipal;
import com.example.fercoganbackend.repository.UsuarioRepository;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Service
public class UsuarioDetailsService implements UserDetailsService {
private final UsuarioRepository usuarioRepository;
private final Logger logger = LoggerFactory.getLogger(UsuarioDetailsService.class);
public UsuarioDetailsService(UsuarioRepository usuarioRepository) {
this.usuarioRepository = usuarioRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.info("Intentando autenticar usuario: {}", username);
Usuario usuario = usuarioRepository.findByUsername(username)
.orElseThrow(() -> {
logger.warn("Usuario no encontrado: {}", username);
return new UsernameNotFoundException("Usuario no encontrado");
});
logger.info("Usuario encontrado: {}, aprobado: {}", usuario.getUsername(), usuario.isAprobado());
logger.info("Roles del usuario: {}", usuario.getRoles());
return new org.springframework.security.core.userdetails.User(
usuario.getUsername(),
usuario.getPassword(),
usuario.isAprobado(), true, true, true,
usuario.getRoles().stream()
.map(r -> new SimpleGrantedAuthority(r.name()))
.toList()
);
}
}

View File

@@ -0,0 +1,42 @@
package com.example.fercoganbackend.service;
import com.example.fercoganbackend.entity.Rol;
import com.example.fercoganbackend.entity.Usuario;
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 UsuarioService(UsuarioRepository repo, PasswordEncoder encoder) {
this.repo = repo;
this.encoder = encoder;
}
public Usuario registrarUsuario(String username, String password, Set<Rol> 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 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);
}
}