Activitats

Donar de baixa un usuari

L’objectiu d’aquesta activitat és afegir la funcionalitat necessària a la nostra aplicació per donar de baixa un usuari.

Quan desenvolupeu una aplicació que tingui usuaris mai és una bona idea esborrar totalment les dades d’un d’ells si decideix donar-se de baixa del sistema. Hi ha diverses raons: la primera és poder calcular dades d’anàlisi de la vostra aplicació, com el nombre d’usuaris que es donen de baixa cada mes. Un altre motiu és permetre a un usuari que torni a activar el seu compte, ja que es pot tractar d’un error.

A partir del codi de l’apartat 1.7, modifiqueu el mètode deleteUser i el seu test unitari corresponent per tal que en lloc d’esborrar l’usuari simplement el marqui com a desactivat.

  1. public void deleteUser(User user) throws Exception {
  2. String qry = "UPDATE users SET active = false where user_id = ?";
  3. PreparedStatement preparedStatement = getPreparedStatement(qry);
  4. preparedStatement.setInt(1, user.getUserId());
  5. createOrUpdateUser(user.getUsername(), preparedStatement);
  6. }

Test unitari:

  1. @Test
  2. public void deleteUser() throws Exception {
  3. String username = "testUser";
  4. String name = "Pete Test";
  5. String email = "pete@email.com";
  6. User createdUser = userDAO.createUser(username, name, email);
  7. Assert.assertNotNull(createdUser);
  8. userDAO.deleteUser(createdUser);
  9. User deletedUser = userDAO.findUserByUsername(username);
  10. Assert.assertNotNull(deletedUser);
  11. Assert.assertFalse(deletedUser.isActive());
  12. }

Llistat d'usuaris actius

L’objectiu d’aquesta activitat és afegir la funcionalitat necessària a la nostra aplicació per trobar un llistat dels usuaris actius al sistema.

A partir del codi de l’apartat 1.7, afegiu el mètode findActiveUsers i el seu test corresponent.

  1. public List<User> findActiveUsers() throws SQLException {
  2. String qry = "select * from users where active = true";
  3. PreparedStatement preparedStatement = getPreparedStatement(qry);
  4. List<User> users = executeQuery(preparedStatement);
  5. return users;
  6. }

I el test:

  1. @Test
  2. public void findActiveUsers() throws Exception {
  3. String username = "peteT";
  4. String name = "Pete Test";
  5. String email = "pete@email.com";
  6. User createdUser = userDAO.createUser(username, name, email);
  7. List<User> activeUsers = userDAO.findActiveUsers();
  8. Assert.assertEquals(3, activeUsers.size());
  9. userDAO.deleteUser(createdUser);
  10. activeUsers = userDAO.findActiveUsers();
  11. Assert.assertEquals(2, activeUsers.size());
  12. }

Actualitzar el 'ranking' d'un usuari

L’objectiu d’aquesta activitat és afegir la funcionalitat necessària a la nostra aplicació per poder actualitzar el ranking d’un usuari.

A partir del codi de l’apartat 1.7, afegiu el mètode updateUserRanking i el seu test corresponent.

  1. public User updateUserRank(User user, int newRanking) throws Exception {
  2. String qry = "UPDATE users SET rank = ? WHERE user_id = ? ";
  3. PreparedStatement preparedStatement = getPreparedStatement(qry);
  4. preparedStatement.setInt(1, newRanking);
  5. preparedStatement.setInt(2, user.getUserId());
  6. return createOrUpdateUser(user.getUsername(), preparedStatement);
  7. }

I el test:

  1. @Test
  2. public void updateUserRank() throws Exception {
  3. String username = "pete";
  4. String name = "Pete Test";
  5. String email = "pete@email.com";
  6. User user = userDAO.createUser(username, name, email);
  7. Assert.assertEquals(0, user.getRank());
  8. user = userDAO.updateUserRank(user, 10);
  9. Assert.assertEquals(10, user.getRank());
  10. }

Contrasenya d'usuari

L’objectiu d’aquesta activitat és afegir la funcionalitat al codi per tal que un usuari tingui contrasenya i la puguem guardar a la base de dades.

A partir del codi de l’apartat 1.7, afegiu l’atribut password a la classe User, modifiqueu la funció createUser per tal que accepti la contrasenya com a paràmetre i afegiu la funcionalitat per modificar la contrasenya d’un usuari.

User.java:

  1. public class User {
  2. private int userId;
  3. private String username;
  4. private String name;
  5. private String email;
  6. private int rank;
  7. private Timestamp createdOn;
  8. private boolean active;
  9. private String password;
  10.  
  11. public User(int userId, String username, String name, String email, int rank, Timestamp createdOn, boolean active, String password) {
  12. this.userId = userId;
  13. this.username = username;
  14. this.name = name;
  15. this.email = email;
  16. this.rank = rank;
  17. this.createdOn = createdOn;
  18. this.active = active;
  19. this.password = password;
  20. }
  21.  
  22. public int getUserId() {
  23. return userId;
  24. }
  25.  
  26. public String getUsername() {
  27. return username;
  28. }
  29.  
  30. public String getName() {
  31. return name;
  32. }
  33.  
  34. public String getEmail() {
  35. return email;
  36. }
  37.  
  38. public int getRank() {
  39. return rank;
  40. }
  41.  
  42. public Timestamp getCreatedOn() {
  43. return createdOn;
  44. }
  45.  
  46. public boolean isActive() {
  47. return active;
  48. }
  49.  
  50. public String getPassword() {
  51. return password;
  52. }
  53.  
  54. public void setPassword(String password) {
  55. this.password = password;
  56. }
  57. }

Crear un usuari amb contrasenya:

  1. public User createUser(String username, String name, String email, String password) throws Exception {
  2. String qry = "INSERT INTO users (username, name, email, password) VALUES (?, ?, ?, ?)";
  3. PreparedStatement preparedStatement = getPreparedStatement(qry);
  4. preparedStatement.setString(1, username);
  5. preparedStatement.setString(2, name);
  6. preparedStatement.setString(3, email);
  7. preparedStatement.setString(4, password);
  8. return createOrUpdateUser(username, preparedStatement);
  9. }

Abans de modificar el test haureu de modificar el fitxer que defineix la taula “User” de la base de dades. Fitxer init.sql:

  1. CREATE TABLE users(user_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL,
  2. username VARCHAR(10) NOT NULL,
  3. name VARCHAR(20) NOT NULL,
  4. email VARCHAR(50) NOT NULL,
  5. password VARCHAR(50) NOT NULL,
  6. rank INT DEFAULT 0,
  7. active BOOLEAN DEFAULT TRUE,
  8. created_on TIMESTAMP AS CURRENT_TIMESTAMP NOT NULL);
  9.  
  10. INSERT INTO users (username, name, email, password) VALUES ('user1', 'John Test', 'john@email.com', 'password');
  11. INSERT INTO users (username, name, email, password) VALUES ('user2', 'Paul Test', 'paul@email.com', 'password');

Test unitari que comprovi que guardem la contrasenya d’un usuari. Modifiquem el test createUser. Teniu present que heu de modificar tots els tests que creen un usuari i passar una contrasenya a l’hora de crear-los.

  1. @Test
  2. public void createUser() throws Exception {
  3. String username = "testUser";
  4. String name = "Pete Test";
  5. String email = "pete@email.com";
  6. String password = "woiejlaksdf";
  7. User createdUser = userDAO.createUser(username, name, email, password);
  8. Assert.assertNotNull(createdUser);
  9. Assert.assertEquals(username, createdUser.getUsername());
  10. Assert.assertNotEquals(0, createdUser.getUserId());
  11. Assert.assertEquals(password, createdUser.getPassword());
  12. }

Finalment, la funció per actualitzar la contrasenya:

  1. public User updateUserPassword(User user, String newPassword) throws Exception {
  2. String qry = "UPDATE users SET password = ? WHERE user_id = ? ";
  3. PreparedStatement preparedStatement = getPreparedStatement(qry);
  4. preparedStatement.setString(1, newPassword);
  5. preparedStatement.setInt(2, user.getUserId());
  6. return createOrUpdateUser(user.getUsername(), preparedStatement);
  7. }

I el test:

  1. @Test
  2. public void updateUserPassword() throws Exception {
  3. String username = "testUser";
  4. String name = "Pete Test";
  5. String email = "pete@email.com";
  6. String password = "woiejlaksdf";
  7. String newPassword = "password";
  8. User createdUser = userDAO.createUser(username, name, email, password);
  9. Assert.assertNotNull(createdUser);
  10. Assert.assertEquals(password, createdUser.getPassword());
  11. User updatedUser = userDAO.updateUserPassword(createdUser, newPassword);
  12. Assert.assertEquals(createdUser.getUserId(), updatedUser.getUserId());
  13. Assert.assertEquals(newPassword, updatedUser.getPassword());
  14. }

Anar a la pàgina anterior:
Accés a dades amb JDBC
Anar a la pàgina següent:
Exercicis d'autoavaluació