package fr.eni.enchere.dal; import fr.eni.enchere.bo.Article; import fr.eni.enchere.bo.UserProfil; import org.apache.catalina.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; 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.password.PasswordEncoder; import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; 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; } public class UserRowMapper implements RowMapper { @Override public UserProfil mapRow(ResultSet rs, int rowNum) throws SQLException { 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; } } @Override public UserProfil findByUsername(String username) { String sql = "SELECT * FROM UTILISATEURS WHERE pseudo = ? OR email = ? AND isDelete = 0"; UserProfil useruser = jdbcTemplate.queryForObject(sql, new UserRowMapper(), username, username); return useruser; } @Override public List findAll() { return List.of(); } @Override public UserProfil findById(int id) { String sql = "SELECT * FROM UTILISATEURS WHERE no_utilisateur = ?"; UserProfil user = jdbcTemplate.queryForObject(sql, new UserRowMapper(), id); return user; } @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, isDelete) VALUES (:pseudo, :nom, :prenom, :email, :telephone, :rue, :code_postal, :ville, :mot_de_passe, 0, false, 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 String sql; MapSqlParameterSource parameters = new MapSqlParameterSource(); if(utilisateur.getPassword().isEmpty()){ sql = "UPDATE UTILISATEURS SET pseudo = :pseudo, nom = :nom, prenom = :prenom, email = :email, telephone = :telephone, rue = :rue, code_postal = :code_postal, ville = :ville WHERE no_utilisateur = :id"; }else{ sql = "UPDATE UTILISATEURS SET pseudo = :pseudo, nom = :nom, prenom = :prenom, email = :email, telephone = :telephone, rue = :rue, code_postal = :code_postal, ville = :ville, mot_de_passe = :mot_de_passe WHERE no_utilisateur = :id"; parameters.addValue("mot_de_passe", passwordEncoder.encode(utilisateur.getPassword())); } 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("id", utilisateur.getId()); namedParameterJdbcTemplate.update(sql, parameters); } } @Override public void delete(int id) { String sql = "UPDATE UTILISATEURS SET isDelete = 1 WHERE no_utilisateur = ?"; jdbcTemplate.update(sql, id); } }