package fr.eni.enchere.dal; import fr.eni.enchere.bo.UserProfil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Repository; import java.util.HashMap; import java.util.List; import java.util.Map; @Repository @Primary public class UserRepositoryImpl implements UserRepository { private final JdbcTemplate jdbcTemplate; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; private PasswordEncoder passwordEncoder; @Autowired public UserRepositoryImpl(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedJdbcTemplate, PasswordEncoder passwordEncoder) { this.jdbcTemplate = jdbcTemplate; this.namedParameterJdbcTemplate = namedJdbcTemplate; this.passwordEncoder = passwordEncoder; } @Override public List findAll() { return List.of(); } @Override public UserProfil findById(int id) { return null; } @Override public UserProfil findByUsername(String username) { String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = :username"; Map params = new HashMap<>(); params.put("username", username); try { UserProfil user = namedParameterJdbcTemplate.queryForObject(sql, params, (rs, rowNum) -> { UserProfil userProfile = new UserProfil(); userProfile.setId(rs.getInt("no_utilisateur")); userProfile.setPrenom(rs.getString("prenom")); userProfile.setNom(rs.getString("nom")); userProfile.setPseudo(rs.getString("pseudo")); userProfile.setEmail(rs.getString("email")); userProfile.setTelephone(rs.getString("telephone")); userProfile.setRue(rs.getString("rue")); userProfile.setCode_postal(rs.getString("code_postal")); userProfile.setVille(rs.getString("ville")); userProfile.setPassword(rs.getString("mot_de_passe")); userProfile.setCredit(rs.getFloat("credit")); userProfile.setAdmin(rs.getBoolean("administrateur")); return userProfile; }); return user; } catch (EmptyResultDataAccessException err) { return null; } } @Override public void save(UserProfil utilisateur) { if (utilisateur.getId() == 0) { //Création utilisateur String sql = "INSERT INTO UTILISATEURS (pseudo, nom, prenom, email, telephone, rue, code_postal, ville, mot_de_passe, credit, administrateur) VALUES (:pseudo, :nom, :prenom, :email, :telephone, :rue, :code_postal, :ville, :mot_de_passe, 0, false)"; MapSqlParameterSource parameters = new MapSqlParameterSource(); parameters.addValue("pseudo", utilisateur.getPseudo()); parameters.addValue("nom", utilisateur.getNom()); parameters.addValue("prenom", utilisateur.getPrenom()); parameters.addValue("email", utilisateur.getEmail()); parameters.addValue("telephone", utilisateur.getTelephone()); parameters.addValue("rue", utilisateur.getRue()); parameters.addValue("code_postal", utilisateur.getCode_postal()); parameters.addValue("ville", utilisateur.getVille()); parameters.addValue("mot_de_passe", passwordEncoder.encode(utilisateur.getPassword())); KeyHolder keyHolder = new GeneratedKeyHolder(); namedParameterJdbcTemplate.update(sql, parameters, keyHolder, new String[] {"no_utilisateur"}); if (keyHolder.getKey() != null) { utilisateur.setId(keyHolder.getKey().intValue()); } }else { //Mettre à jour } } @Override public void delete(int id) { } }