Files
pmu-bet-engine/src/main/java/com/pmu/betengine/service/UserService.java
2025-12-02 08:40:58 +00:00

103 lines
4.3 KiB
Java

package com.pmu.betengine.service;
import com.pmu.betengine.model.User;
import com.pmu.betengine.model.statut.StatutUser;
import com.pmu.betengine.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// CREATE
public User create(User user) {
// 1. Vérification des champs obligatoires
if (!StringUtils.hasText(user.getNom())) {throw new RuntimeException("Le nom est obligatoire");}
if (!StringUtils.hasText(user.getPrenom())) {throw new RuntimeException("Le prénom est obligatoire");}
if (!StringUtils.hasText(user.getIdentifiant())) {throw new RuntimeException("L'identifiant est obligatoire");}
if (!StringUtils.hasText(user.getPassword())) {throw new RuntimeException("Le mot de passe est obligatoire");}
if (user.getRoleId() == null) {throw new RuntimeException("L'ID du rôle est obligatoire");}
// 2. Vérification de l'unicité
if (userRepository.existsByIdentifiant(user.getIdentifiant())) {throw new RuntimeException("Cet identifiant existe déjà");}
if (user.getMatriculeAgent() != null &&
userRepository.existsByMatriculeAgent(user.getMatriculeAgent())) {throw new RuntimeException("Ce matricule agent existe déjà");}
// 3. Validation du mot de passe
if (!user.getPassword().matches("^(?=.*[0-9])(?=.*[a-zA-Z]).{8,}$")) {throw new RuntimeException("Le mot de passe doit contenir au moins 8 caractères, incluant lettres et chiffres");}
// 4. Définition des valeurs par défaut et encodage du mot de passe
user.setId(null);
user.setPassword(passwordEncoder.encode(user.getPassword()));
user.setStatut(StatutUser.ACTIF.name());
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(LocalDateTime.now());
user.setDerniereConnexion(null);
// 5. Vérification des champs numériques
if (user.getNombreIpAutorise() == null || user.getNombreIpAutorise() < 0) {
user.setNombreIpAutorise(0);
}
if (user.getNombreIpAutoAutorise() == null || user.getNombreIpAutoAutorise() < 0) {
user.setNombreIpAutoAutorise(0);
}
// 6. Nettoyage des chaînes
user.setIdentifiant(user.getIdentifiant().trim().toLowerCase());
if (user.getMatriculeAgent() != null) {
user.setMatriculeAgent(user.getMatriculeAgent().trim().toUpperCase());
}
// 7. Enregistrement
return userRepository.save(user);
}
// UPDATE
public User update(Long id, User updatedUser) {
return userRepository.findById(id).map(user -> {
user.setNom(updatedUser.getNom());
user.setPrenom(updatedUser.getPrenom());
user.setIdentifiant(updatedUser.getIdentifiant());
user.setMatriculeAgent(updatedUser.getMatriculeAgent());
user.setRoleId(updatedUser.getRoleId());
user.setRestrictionConnexion(updatedUser.getRestrictionConnexion());
user.setRestrictionAutomatique(updatedUser.getRestrictionAutomatique());
user.setNombreIpAutorise(updatedUser.getNombreIpAutorise());
user.setNombreIpAutoAutorise(updatedUser.getNombreIpAutoAutorise());
user.setStatut(updatedUser.getStatut());
user.setDerniereConnexion(updatedUser.getDerniereConnexion());
user.setUpdatedAt(LocalDateTime.now());
return userRepository.save(user);
}).orElseThrow(() -> new RuntimeException("Utilisateur introuvable"));
}
// READ by ID
public User getById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("Utilisateur introuvable"));
}
// READ all
public List<User> getAll() {
return userRepository.findAll();
}
// DELETE
public void delete(Long id) {
userRepository.deleteById(id);
}
}