Semaine 2

Lors de cette séance on va ajouter une base de données (BDD) à notre service pour pouvoir stocker nos utilisateurs. Une fois la BDD connectée on modifiera notre controller User pour qu'il puisse l'utiliser.

Base de données

Je vous invite à lire la partie sur les bases de données dans le cours Ici

Vous devrez ajouter une table User dans la BDD avec les champs suivant:

  • Id : Id dans la base
  • Pseudo : Pseudo de l'utilisateur
  • Password : Mot de passe de l'utilisateur
  • Role : Le rôle de l'utilisateur (User, Admin)

Modifiez votre classe User en conséquence.

Utiliser la BDD dans un controller

Vous injecterez votre contexte BDD dans le controller User pour pouvoir accéder a la BDD.

Vous modifierez ensuite les méthodes de votre controller pour qu'elles utilisent la BDD.

A la fin de cette séance votre controller devra être capable de:

  • Récupérer un utilisateur par son id
  • Récupérer un utilisateur par son pseudo et son mot de passe
  • Ajouter un utilisateur
  • Modifier un utilisateur (Pseudo, Role, Password)
  • Supprimer un utilisateur

Voici la liste des endpoints que le controller devra fournir:

GET /api/User/{id} // Renvoi l'utilisateur correspondant à l'id
POST /api/User/login // Renvoi l'utilisateur si le pseudo et le mot de passe sont correct
POST /api/User/register // Ajoute un utilisateur en base de donnée et le renvoi
PUT /api/User/{id} // Modifie un utilisateur
DELETE /api/User/{id} // Supprime un utilisateur

La route PUT /api/user/{id} prendra en paramètre un objet UserUpdate qui sera une classe qui hérite de UserInfo et lui ajoute le champ Role.

Hasher les mots de passe

Il est important de ne pas stocker les mots de passe en clair dans la BDD. Pour cela on va hasher les mots de passe avant de les stocker.

Je vous invite à lire la partie sur le password hasher dans le cours Ici

Pour utiliser le password hasher, vous devrez l'injecter dans votre controller User. Pour savoir comment faire, consultez le cours sur l'injection de dépendance Ici

Quand un utilisateur s'enregistre, vous devrez hasher son mot de passe avant de le stocker dans la BDD. Puis quand un utilisateur se connecte, vous devrez verifier que le mot de passe donné correspond bien au mot de passe hashé en BDD.

Vous ne renverrez jamais le mot de passe hashé(ou non) dans les réponses de votre service.

Bonus

Ajoutez une méthode pour récupérer tous les utilisateurs de la BDD Ajoutez une méthode pour récupérer tous les utilisateurs admin de la BDD Ajoutez une méthode pour récupérer tous les utilisateurs dont le nom contient une chaîne de caractères donnée

Voici les endpoints correspondant:

GET /api/User // Renvoi tous les utilisateurs mais sans les mots de passe
GET /api/User/admin // Renvoi tous les utilisateurs admin
GET /api/User/search/{name} // Renvoi tous les utilisateurs dont le pseudo contient `name`