package database; import metier.Tech; import metier.User; import SGBD.Data; import metier.Utils; import java.sql.*; import java.util.Vector; /** * Classe regroupant les méthodes liées à la BDD et aux utilisateurs. */ public class UserDao { /** * Méthode récupérant un utilisateur parmi tous les utilisateurs dans la base de données. * @param login nom d'utilisateur * @param passHash mot de passe hashé * @return Renvoi un utilisateur précis et ses infos associées * @throws Exception */ public static User Read(String login, String passHash) throws Exception { Connection bdd = Data.getConnection(); if(bdd == null){ throw new DatabaseError(); } PreparedStatement statement = bdd.prepareStatement("SELECT * FROM (SELECT * FROM Utilisateur) u JOIN (SELECT nom,prenom,UTILISATEUR_ID FROM Client UNION SELECT nom,prenom,UTILISATEUR_ID FROM Technicien UNION SELECT nom,prenom,UTILISATEUR_ID FROM commercial) o ON u.ID = o.UTILISATEUR_ID WHERE u.LOGIN = '"+login+"';", ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet result = statement.executeQuery(); result.last(); int countLine = result.getRow(); if (countLine == 1) { result.first(); int dbID = result.getInt("ID"); String dbLogin = result.getString("LOGIN"); String dbPasswordHash = result.getString("PASSWORD"); String dbLastName = result.getString("nom"); String dbFirstName = result.getString("prenom"); passHash = Utils.HashPassword(passHash); if (passHash.equals(dbPasswordHash)) { User initUser = new User(dbID); initUser.setFirstName(dbFirstName); initUser.setLastName(dbLastName); initUser.setLogin(dbLogin); initUser.setPasswordHash(dbPasswordHash); initUser.setConnected(true); return initUser; } else { // ERREUR DE CONNEXION :( throw new BadPasswordError(); } } else { // ERREUR DE CONNEXION :( throw new BadUserError(); } } /** * Méthode récupérant la liste des techniciens * @return Vector d'élément Tech * @throws Exception */ public static Vector ListTechs() throws Exception { Connection bdd = Data.getConnection(); assert bdd != null : "getConnection returned null"; PreparedStatement statement = bdd.prepareStatement("SELECT * FROM Utilisateur JOIN Technicien ON Utilisateur.id = Technicien.UTILISATEUR_ID WHERE Utilisateur.TYPE_UTILISATEUR = 'technicien';", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet result = statement.executeQuery(); result.beforeFirst(); Vector techs = new Vector<>(); while (result.next()) { int dbID = result.getInt("ID"); String dbLogin = result.getString("LOGIN"); String dbPasswordHash = result.getString("PASSWORD"); String dbLastName = result.getString("nom"); String dbFirstName = result.getString("prenom"); Tech initTech = new Tech(dbID); initTech.setFirstName(dbFirstName); initTech.setLastName(dbLastName); initTech.setLogin(dbLogin); initTech.setPasswordHash(dbPasswordHash); techs.add(initTech); } return techs; } /** * Mise à jour des infos d'un utilisateur dans la base de données * @param u un utilisateur * @throws SQLException */ public static void Update(User u) throws SQLException { Connection bdd = Data.getConnection(); assert bdd != null : "getConnection returned null"; String firstName = u.getFirstName(); String lastName = u.getLastName(); int ID = u.getID(); String login = u.getLogin(); String pass = u.getPasswordHash(); PreparedStatement gettype = bdd.prepareStatement("SELECT TYPE_UTILISATEUR FROM Utilisateur WHERE ID = " + ID + ";", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet gettypeexec = gettype.executeQuery(); gettypeexec.first(); String type = gettypeexec.getString("TYPE_UTILISATEUR"); if(type.equals("technicien"))type="Technicien"; if(type.equals("client"))type="Client"; PreparedStatement statement = bdd.prepareStatement("UPDATE Utilisateur SET LOGIN = '" + login + "' WHERE ID = " + ID + ";", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); int result = statement.executeUpdate(); PreparedStatement nom_prenom = bdd.prepareStatement("UPDATE "+type+" SET prenom = '" + firstName + "', nom = '" + lastName + "' WHERE UTILISATEUR_ID = " + ID + ";", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); int result2 = nom_prenom.executeUpdate(); if(!pass.equals("")) { PreparedStatement passupdate = bdd.prepareStatement("UPDATE Utilisateur SET PASSWORD = '" + pass + "' WHERE ID = " + ID + ";", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); int result63 = passupdate.executeUpdate(); } } }