Skip to content

Commit cd66a1d

Browse files
Labo 18
1 parent 2795cc8 commit cd66a1d

File tree

10 files changed

+74
-91
lines changed

10 files changed

+74
-91
lines changed

web/docs/03-labos/10-labo17.md

Lines changed: 1 addition & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1 @@
1-
# Laboratoire 17½ 💩
2-
3-
Ce laboratoire couvre les notions des cours 17 et 18.
4-
5-
<center>![Stime](../../static/img/labo16/stime.png)</center>
6-
7-
Téléchargez les [projets de départ](../../static/files/labo16.zip). N'oubliez pas de mettre à jour la base de données avec `dotnet ef database update`.
8-
9-
**Ce labo peut sembler intimidant**, mais au final c'est principalement (presque) copier-coller 5 actions à partir des exemples dans la section Access Control du cours 17.
10-
11-
## 🔍 Qui êtes-vous ?
12-
13-
La gestion des utilisateurs (inscription et connexion) est déjà largement implémentée **côté serveur**. Il restera juste à compléter l'implémentation **côté client**.
14-
15-
Vous aurez à faire toute l'implémentation **côté serveur** en faisant le **TP3** très bientôt et ce sera déjà assez.
16-
17-
<center>![Inscription et connexion](../../static/img/labo16/user.png)</center>
18-
19-
### 1 - Inscription
20-
21-
[💡](/cours/rencontre8.2#-inscription) Complétez le code **côté Angular** pour que l'inscription soit fonctionnelle.
22-
23-
Testez si cela fonctionne en créant un utilisateur.
24-
25-
### 2 - Connexion
26-
27-
[💡](/cours/rencontre8.2#-connexion) Complétez le code **côté Angular** pour que la connexion soit fonctionnelle.
28-
29-
Testez si cela fonctionne en vous connectant.
30-
31-
## 💼 Et que voulez-vous ?
32-
33-
Dans cette section, vous aurez à compléter toutes les actions de `ReviewsController`. Pas besoin d'utiliser un **service** (À part **UserManager**) dans ce laboratoire. Codez tout directement dans les actions du contrôleur.
34-
35-
<center>![Critiques](../../static/img/labo16/review1.png)</center>
36-
37-
### 3 - PostReview
38-
39-
:::note
40-
41-
Oui il y a beaucoup d'ampoules... Vous n'avez pas forcément besoin de toutes les consulter. C'est seulement si vous ne vous souvenez plus comment procéder.
42-
43-
:::
44-
45-
[💡](/cours/rencontre9.1#-post) Complétez l'action `Post` qui permettra d'ajouter un `Review` dans la base de données.
46-
47-
[💡](/cours/rencontre8.2#-action-réservée-aux-utilisateurs) Cette action devra seulement être utilisable par les utilisateurs authentifiés.
48-
49-
[💡](/cours/rencontre8.2#-exemple-de-requête-utilisant-le-token) Assurez-vous de joindre le token à la requête puisqu'elle nécessitera l'authentification.
50-
51-
[💡](/cours/rencontre8.1#-data-transfer-objects) Il faudra un DTO pour envoyer le **nom du jeu** et le **texte de la critique**.
52-
53-
[💡](/cours/rencontre8.2#%EF%B8%8F%EF%B8%8F-déterminer-qui-envoie-la-requête) Il faudra vérifier qui envoie la requête pour l'associer à la nouvelle `Review`.
54-
55-
[💡](/cours/rencontre9.1#-data-transfer-objects) Il faudra retourner, avec `Ok(...)`, un objet un peu différent du modèle `Review`. Vérifiez le modèle `Review` côté Angular pour créer et utiliser le parfait **DTO** !
56-
57-
### 4 - GetReview
58-
59-
:::note
60-
61-
Gardez à l'esprit que cette requête est déjà automatiquement appelée lorsque la page Web est réactualisée.
62-
63-
:::
64-
65-
[💡](/cours/rencontre9.1#-data-transfer-objects) Il faudra simplement retourner la liste de tous les `Review` convertis avec le même **DTO** que créé plus haut pour `Post`.
66-
67-
[💡](/cours/rencontre8.2#-action-réservée-aux-utilisateurs) Cette action doit être disponible pour tous, même si nous ne sommes pas authentifiés.
68-
69-
### 5 - DeleteReview
70-
71-
[💡](/cours/rencontre9.1#-delete) Seul l'auteur d'une critique doit être capable de la supprimer.
72-
73-
### 6 - EditReview
74-
75-
<center>![Modifier une critique](../../static/img/labo16/review2.png)</center>
76-
77-
[💡](/cours/rencontre9.1#-put) Seul l'auteur d'une critique doit être capable de la modifier.
78-
79-
[💡](/cours/rencontre9.1#-put) Seul le texte de la critique doit pouvoir être modifié. (Utilisez le même **DTO** que pour `Post` et ignorez le nom du jeu, par exemple !)
80-
81-
### 7 - UpvoteReview
82-
83-
[💡](/cours/rencontre9.1#-put) Seul un utilisateur authentifié **qui N'est PAS** l'auteur d'une critique doit être capable de la _posivoter_.
84-
85-
Notez que si on _posivote_ une critique qu'on a **déjà _posivoté_**, ça doit annuler / retirer notre upvote.
86-
87-
## 🔑 Qualité > Quantité
88-
89-
### 8 - Interceptor
90-
91-
[💡](/cours/rencontre8.2#-intercepteurs) Normalement, vous avez joint un token pour plusieurs requêtes dans le **projet Angular**. Remplacez ce code répétitif par un **intercepteur**.
1+
# Laboratoire 17 💩

web/docs/03-labos/11-labo18.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Laboratoire 18
2+
3+
<center>![Stime](../../static/img/labo16/stime.png)</center>
4+
5+
Téléchargez les [projets de départ](../../static/files/labo16.zip). N'oubliez pas de mettre à jour la base de données avec `dotnet ef database update`.
6+
7+
La gestion des utilisateurs est déjà fonctionnelle et un intercepteur est déjà complété. (Vous n'aurez jamais à joindre token vous-mêmes, mais il faudra quand même être connecté !) Notez qu'il y a déjà deux `reviews` existantes dans la base de données. Elles ont été créées par l'utilisateur `bob` dont le mot de passe est `allo`. Sacré *Bob*.
8+
9+
Pendant le laboratoire, vous aurez **cinq requêtes** à rendre fonctionnelles, principalement dans le `ReviewsController`.
10+
11+
## 🔥 Retour de flamme
12+
13+
Dans cette section, vous aurez à compléter deux actions de `ReviewsController`. Ce sont des `reviews` qui devront être retournées par le serveur, mais il faudra un *DisplayDTO* vu que les classes `Review` du client et du serveur sont différentes.
14+
15+
### 1 - ReviewDisplayDTO
16+
17+
[💡](/notes/rencontre9.2#-data-transfer-objects) Comparez les classes `Review.cs` (serveur) et `review.ts` (client). Créez un *DisplayDTO* qui permettra d'envoyer au client des `Review` avec les données nécessaires.
18+
19+
### 2 - GetReview
20+
21+
[💡](/notes/rencontre9.2#-data-transfer-objects) Pour le moment, les `reviews` ne s'affichent pas dans la page Web. C'est normal, il faut implémenter l'action `GetReview` d'abord. Elle va simplement récupérer toutes les `reviews` dans la base de données et les convertir en `ReviewDisplayDTO` pour les envoyer au client. Une fois que ce sera fait, *décommentez* l'instruction `getReviews()` dans le `useEffect()` du composant `Home`.
22+
23+
<center>![Liste des reviews](../../static/img/labo16/reviews.png)</center>
24+
25+
### 3 - PostReview
26+
27+
:::warning
28+
29+
Pour cette requête et les suivantes, vous pourriez être agacé(e)s par le fait que les notes de cours montrent des exemples **avec contrôleur + service**, alors que dans ce projet, il n'y a **pas de service**. Vous devriez être capables de rassembler toutes les opérations nécessaires dans le contrôleur malgré tout. Sinon, sachez que dans le **TP3** il y aura des services, alors ces exemples vous serviront.
30+
31+
:::
32+
33+
:::info
34+
35+
Connectez-vous avant de poster une `Review` !
36+
37+
:::
38+
39+
[💡](/notes/rencontre9.2#-post) Complétez l'action `PostReview` qui permettra d'ajouter un `Review` dans la base de données. La `Review` créée devra être associé à l'auteur qui a envoyé la requête.
40+
41+
[💡](/notes/rencontre9.2#-data-transfer-objects) Il faudra retourner, avec `Ok(...)`, le nouveau `Review`... converti en `ReviewDisplayDTO`, bien entendu
42+
43+
Le code côté **Next.js** est déjà complété. un **DTO** est envoyé avec le texte et le nom du jeu.
44+
45+
<center>![Créer un review](../../static/img/labo16/post.png)</center>
46+
47+
## 🔒 Critiques sécuritaires
48+
49+
<center>![Opérations pour une critique](../../static/img/labo16/review1.png)</center>
50+
51+
### 4 - DeleteReview
52+
53+
[💡](/notes/rencontre9.2#-delete) Seul l'**auteur** d'une critique doit être capable de la supprimer.
54+
55+
Le code côté client est déjà complété.
56+
57+
### 5 - UpvoteReview
58+
59+
[💡](/notes/rencontre9.2#-put) Seul un utilisateur authentifié **qui N'est PAS** l'auteur d'une critique doit être capable de la _posivoter_.
60+
61+
Notez que si on _posivote_ une critique qu'on a **déjà _posivoté_**, ça doit annuler / retirer notre upvote.
62+
63+
Le code côté client est déjà complété.
64+
65+
### 6 - EditReview
66+
67+
<center>![Modifier une critique](../../static/img/labo16/review2.png)</center>
68+
69+
[💡](/notes/rencontre9.2#-put) Seul l'auteur d'une critique doit être capable de la modifier.
70+
71+
[💡](/notes/rencontre9.2#-put) Seul le texte de la critique doit pouvoir être modifié. (Utilisez le même **DTO** que pour `PostReview` et ignorez le nom du jeu, par exemple !)
72+
73+
Le code côté client est déjà complété.
File renamed without changes.
File renamed without changes.

web/static/files/labo17.zip

-162 KB
Binary file not shown.

web/static/files/labo18.zip

108 KB
Binary file not shown.

web/static/img/labo16/post.png

13.2 KB
Loading

web/static/img/labo16/review1.png

-22.1 KB
Loading

web/static/img/labo16/review2.png

5.32 KB
Loading

web/static/img/labo16/reviews.png

16.2 KB
Loading

0 commit comments

Comments
 (0)