1
00:00:03,950 --> 00:00:09,405
La seconda parte di questo esercizio riguarda

2
00:00:09,405 --> 00:00:15,340
le varie operazioni get put post ed eliminazione sui documenti secondari all'interno del documento.

3
00:00:15,340 --> 00:00:19,380
Come abbiamo visto nell'esempio per i piatti,

4
00:00:19,380 --> 00:00:26,680
abbiamo visto che i commenti sono inclusi all'interno del piatto stesso come sottodocumento,

5
00:00:26,680 --> 00:00:31,680
nel modo in cui abbiamo definito sia lo schema dei commenti che lo schema dei piatti,

6
00:00:31,680 --> 00:00:35,150
e quindi definire il modello del piatto includendo lo schema dei commenti

7
00:00:35,150 --> 00:00:38,880
nello schema del piatto come una matrice di commenti.

8
00:00:38,880 --> 00:00:43,580
E abbiamo visto nell'esercizio precedente come i commenti sono racchiusi all'interno di

9
00:00:43,580 --> 00:00:50,990
un array sotto forma di un array di documenti all'interno di ogni documento piatto.

10
00:00:50,990 --> 00:00:55,525
Quindi, come possiamo apportare modifiche ai commenti stessi?

11
00:00:55,525 --> 00:00:59,590
Come otteniamo tutta la lista dei commenti per un piatto?

12
00:00:59,590 --> 00:01:06,515
Come modifichiamo un commento specifico nel piatto e così via?

13
00:01:06,515 --> 00:01:10,820
Quindi questo è quello che vedremo su come

14
00:01:10,820 --> 00:01:16,130
supportarli utilizzando i vari get put post ed eliminare le operazioni sui

15
00:01:16,130 --> 00:01:22,385
piatti piatti piatto barra ID barra commenti e i piatti

16
00:01:22,385 --> 00:01:29,935
slash piatto ID slash commenti barra commento ID endpoint API REST.

17
00:01:29,935 --> 00:01:32,885
Per iniziare a questo esercizio, di

18
00:01:32,885 --> 00:01:35,735
nuovo, tornando al router piatto,

19
00:01:35,735 --> 00:01:44,170
hanno già visto come gestiamo l'endpoint barra e l'endpoint ID piatto barra.

20
00:01:44,170 --> 00:01:50,300
Ora, gran parte di questo lavoro che facciamo qui è già utile per noi,

21
00:01:50,300 --> 00:01:53,855
quindi quello che ho intenzione di fare è copiare questo codice,

22
00:01:53,855 --> 00:02:01,070
e poi modificheremo quel codice in modo appropriato per gestire i commenti e l'ID commento.

23
00:02:01,070 --> 00:02:04,250
Quindi ho intenzione di copiare l'intero codice che abbiamo

24
00:02:04,250 --> 00:02:08,750
qui sia per la barra che per l'ID piatto dorato barra,

25
00:02:08,750 --> 00:02:14,300
e poi lo incolleremo di nuovo qui sotto.

26
00:02:14,300 --> 00:02:17,795
E poi entreremo e modificheremo ognuno di loro.

27
00:02:17,795 --> 00:02:21,470
Quindi abbiamo visto che se si guarda indietro,

28
00:02:21,470 --> 00:02:27,800
il primo sta gestendo la barra che verrà montata sull'endpoint piatti barra.

29
00:02:27,800 --> 00:02:30,905
E il prossimo è gestire l'ID piatto barra.

30
00:02:30,905 --> 00:02:37,410
Quindi il terzo dovrebbe gestire i commenti della barra dell'ID del piatto.

31
00:02:37,410 --> 00:02:39,060
Quindi, andando quaggiù,

32
00:02:39,060 --> 00:02:49,080
questo percorso del router del terzo piatto sarebbe quello dei commenti della barra dell'ID del piatto.

33
00:02:49,080 --> 00:02:51,300
E poi l'ultimo, ovviamente,

34
00:02:51,300 --> 00:02:56,610
sarebbe slash dish ID slash

35
00:02:56,610 --> 00:03:05,670
commenti e poi tagliare l'ID commento dei due punti.

36
00:03:05,670 --> 00:03:09,289
Quindi, ora che abbiamo aggiornato questi percorsi qui,

37
00:03:09,289 --> 00:03:12,380
ora il passo successivo è quello di entrare e correggere

38
00:03:12,380 --> 00:03:16,310
il codice nel post get put ed eliminare le operazioni qui.

39
00:03:16,310 --> 00:03:22,025
Quindi inizieremo con il piatto barra ID barra commenti endpoint.

40
00:03:22,025 --> 00:03:25,530
Quindi, in caso di barra piatto ID barra commenti endpoint,

41
00:03:25,530 --> 00:03:31,425
così faremo piatti trovare ma invece di dire piatti trovare,

42
00:03:31,425 --> 00:03:38,100
faremo piatti trovare, faremo piatti trovare per

43
00:03:38,100 --> 00:03:45,595
ID e così troveremo il piatto specifico che stiamo cercando.

44
00:03:45,595 --> 00:03:53,335
Quindi qui, cercheremo che req params Dish ID,

45
00:03:53,335 --> 00:03:57,820
quindi cercheremo prima il piatto,

46
00:03:57,820 --> 00:04:02,900
e così questo restituirà un piatto specifico.

47
00:04:02,900 --> 00:04:06,865
Quindi, quando restituisce quel piatto specifico qui,

48
00:04:06,865 --> 00:04:13,475
allora quello che controlleranno qui dentro

49
00:04:13,475 --> 00:04:20,765
è che se il piatto non è uguale a null.

50
00:04:20,765 --> 00:04:24,169
È del tutto possibile che il piatto non esista,

51
00:04:24,169 --> 00:04:28,000
quindi se cerchiamo un piatto specifico con un ID piatto,

52
00:04:28,000 --> 00:04:29,495
quel piatto potrebbe non esistere,

53
00:04:29,495 --> 00:04:35,360
quindi dobbiamo preoccuparci di gestire quella particolare situazione.

54
00:04:35,360 --> 00:04:39,590
Quindi gestiamo quella parte qui dentro,

55
00:04:39,590 --> 00:04:43,985
e quindi se non è nulla allora significa che il piatto esiste.

56
00:04:43,985 --> 00:04:51,125
Quindi ho intenzione di tagliare questo e poi incollarlo lì dentro.

57
00:04:51,125 --> 00:04:54,150
E poi in questo caso,

58
00:04:54,150 --> 00:04:56,940
poiché il piatto non è nullo,

59
00:04:56,940 --> 00:05:02,300
quindi restituiremo il codice di stato e l'intestazione del set e

60
00:05:02,300 --> 00:05:07,755
poi questo qui restituiremo i commenti del piatto,

61
00:05:07,755 --> 00:05:13,685
perché ci viene chiesto di restituire solo i commenti per quel piatto particolare, quindi diremo:

62
00:05:13,685 --> 00:05:16,365
«I piatti trovano per ID,

63
00:05:16,365 --> 00:05:20,390
quindi req parametri piatto ID e poi piatto.»

64
00:05:20,390 --> 00:05:25,540
E così restituiremo i commenti del piatto qui.

65
00:05:25,540 --> 00:05:30,320
Altrimenti, quindi questa è l'altra parte.

66
00:05:30,320 --> 00:05:33,500
Quindi il che significa che il piatto non esiste.

67
00:05:33,500 --> 00:05:35,295
Quindi, in questo caso,

68
00:05:35,295 --> 00:05:43,095
costruiremmo un errore qui dicendo nuovi errori e poi diremo

69
00:05:43,095 --> 00:05:56,515
piatto req params dish ID non trovato.

70
00:05:56,515 --> 00:05:59,840
Quindi questo piatto particolare non è stato trovato,

71
00:05:59,840 --> 00:06:04,100
quindi ovviamente non saremo in grado di restituire i commenti per il piatto non esistente.

72
00:06:04,100 --> 00:06:05,560
Quindi, in questo caso,

73
00:06:05,560 --> 00:06:09,740
quindi creeremo un nuovo oggetto errore e quindi

74
00:06:09,740 --> 00:06:15,090
imposteremo lo stato nell'oggetto errore a 404.

75
00:06:15,090 --> 00:06:17,855
Ancora una volta, questo è 404 non trovato,

76
00:06:17,855 --> 00:06:23,420
e poi torneremo il prossimo errore.

77
00:06:23,420 --> 00:06:24,990
Ora, perché lo facciamo?

78
00:06:24,990 --> 00:06:29,885
Perché se restituisci questo come un errore, come ricorderai,

79
00:06:29,885 --> 00:06:33,665
questo verrà gestito dal tuo file app.js,

80
00:06:33,665 --> 00:06:35,565
quindi nel file app.js,

81
00:06:35,565 --> 00:06:37,220
proprio in basso qui,

82
00:06:37,220 --> 00:06:40,700
abbiamo il gestore degli errori qui.

83
00:06:40,700 --> 00:06:42,685
Quindi, quando arriva qui,

84
00:06:42,685 --> 00:06:46,560
questo imposterà il resto o lo stato sullo stato del punto di errore,

85
00:06:46,560 --> 00:06:48,410
che avevamo impostato su 404,

86
00:06:48,410 --> 00:06:49,900
quindi questo è ciò che verrà restituito,

87
00:06:49,900 --> 00:06:56,720
e quindi prenderà semplicemente quell'errore e quindi renderà quell'errore qui.

88
00:06:56,720 --> 00:07:01,020
In modo che si prenderà cura di rendere gli errori.

89
00:07:01,020 --> 00:07:07,080
Quindi questo restituirà il messaggio di errore al nostro cliente.

90
00:07:07,080 --> 00:07:09,490
Questo è ciò che stiamo invocando qui,

91
00:07:09,490 --> 00:07:11,090
quindi se il piatto non esiste,

92
00:07:11,090 --> 00:07:15,475
restituiremo quell'errore qui dall'operazione get.

93
00:07:15,475 --> 00:07:19,475
Ora, per il post in caso di post,

94
00:07:19,475 --> 00:07:24,920
ci aspettiamo che venga

95
00:07:24,920 --> 00:07:30,980
restituito un ID piatto e poi cercheremo il piatto,

96
00:07:30,980 --> 00:07:35,840
e poi prenderemo il set di commenti

97
00:07:35,840 --> 00:07:41,555
dal corpo e poi lo spingeremo nel piatto lì.

98
00:07:41,555 --> 00:07:46,375
Quindi diremo piatti, ancora una volta, qui,

99
00:07:46,375 --> 00:07:52,750
dovremo fare il ritrovamento per id perché stiamo cercando il piatto specifico qui.

100
00:07:52,750 --> 00:07:59,485
Quindi per il post, diremo piatto trovare per ID poi piatto,

101
00:07:59,485 --> 00:08:01,750
e così dentro qui,

102
00:08:01,750 --> 00:08:04,060
se il piatto esiste,

103
00:08:04,060 --> 00:08:06,555
allora gestiremo il piatto in modo appropriato.

104
00:08:06,555 --> 00:08:10,360
In caso contrario, dovremo inviare il messaggio di errore.

105
00:08:10,360 --> 00:08:16,730
Quindi lasciami copiare questa parte dal get e poi,

106
00:08:16,730 --> 00:08:20,710
sostituiremo questo qui.

107
00:08:22,130 --> 00:08:25,155
Quindi, ovviamente, se il piatto non esiste,

108
00:08:25,155 --> 00:08:27,165
allora stiamo andando a restituire questo errore qui,

109
00:08:27,165 --> 00:08:31,035
ma se il piatto esiste, in tal caso,

110
00:08:31,035 --> 00:08:35,930
restituiremo il codice di stato 200 set header.

111
00:08:35,930 --> 00:08:41,835
Ma prima di passare indietro il valore,

112
00:08:41,835 --> 00:08:50,400
quello che sto per fare è dire commenti piatto,

113
00:08:50,400 --> 00:08:55,020
quindi stiamo postando una nuova serie di commenti per il piatto.

114
00:08:55,130 --> 00:09:02,790
Quindi diremo commenti piatto spingere corpo req.

115
00:09:02,790 --> 00:09:07,785
Perché il corpo del messaggio contiene tutti i commenti che devono essere spinti qui,

116
00:09:07,785 --> 00:09:13,890
e poi, diremo, «Piatto salva».

117
00:09:13,890 --> 00:09:22,010
E quindi se il salvataggio ritorna con successo con il piatto qui,

118
00:09:22,010 --> 00:09:27,030
quindi invieremo il piatto aggiornato da qui.

119
00:09:32,350 --> 00:09:40,600
Quindi questa parte in cui stiamo costruendo il codice di stato,

120
00:09:40,600 --> 00:09:49,750
lo faremo dentro qui e poi invieremo indietro il

121
00:09:54,320 --> 00:10:00,875
Res.JSON e il piatto che abbiamo ottenuto qui.

122
00:10:00,875 --> 00:10:04,885
Quindi, quello che stiamo facendo è salvare il piatto qui.

123
00:10:04,885 --> 00:10:11,430
Stiamo prima spingendo i commenti nel piatto lì,

124
00:10:11,430 --> 00:10:14,420
la nuova serie di commenti nel piatto qui,

125
00:10:14,420 --> 00:10:19,210
e poi stiamo salvando il piatto aggiornato qui.

126
00:10:19,210 --> 00:10:20,825
Quindi, dopo il salvataggio,

127
00:10:20,825 --> 00:10:29,070
restituiremo il piatto aggiornato all'utente qui.

128
00:10:29,290 --> 00:10:32,125
Quindi se c'è un errore,

129
00:10:32,125 --> 00:10:37,370
allora gestiremo l'errore proprio come abbiamo fatto qui.

130
00:10:38,570 --> 00:10:41,420
Se il piatto non esiste, ovviamente,

131
00:10:41,420 --> 00:10:45,825
restituiremo l'errore dicendo che il piatto non esiste.

132
00:10:45,825 --> 00:10:47,475
Quindi, questo è per il post.

133
00:10:47,475 --> 00:10:49,100
L' operazione PUT, ovviamente,

134
00:10:49,100 --> 00:10:51,680
non è supportata sui piatti.

135
00:10:51,680 --> 00:10:53,140
Quindi, in questo caso,

136
00:10:53,140 --> 00:10:56,210
stiamo cercando di eseguire l'operazione PUT

137
00:10:56,210 --> 00:11:06,550
sui piatti, req.params.dishid/commenti.

138
00:11:08,370 --> 00:11:10,980
Quindi, questo non è permesso.

139
00:11:10,980 --> 00:11:13,415
Quindi, questo è quello che stiamo dicendo per l'operazione PUT.

140
00:11:13,415 --> 00:11:15,545
Per l'operazione di eliminazione,

141
00:11:15,545 --> 00:11:19,130
quello che faremo è prima trovare il piatto.

142
00:11:19,130 --> 00:11:22,275
Quindi, diremo piatto.FindByid.

143
00:11:22,275 --> 00:11:27,785
Quindi, cancella significa che stiamo rimuovendo tutti i commenti dal piatto,

144
00:11:27,785 --> 00:11:28,850
non dal piatto stesso,

145
00:11:28,850 --> 00:11:31,540
ma stiamo rimuovendo tutti i commenti dal piatto.

146
00:11:31,540 --> 00:11:33,495
Quindi, in questo caso,

147
00:11:33,495 --> 00:11:41,695
quello che finiremmo per fare è il seguente: quindi se il piatto non è nullo,

148
00:11:41,695 --> 00:11:47,345
ricordate che dobbiamo gestirlo dicendo poi piatto.

149
00:11:47,345 --> 00:11:49,400
Se il piatto non è nullo,

150
00:11:49,400 --> 00:11:53,080
allora rimuoveremo tutti i commenti dal piatto.

151
00:11:53,080 --> 00:11:57,480
Quindi, ho intenzione di copiare quel codice e poi incollarlo qui,

152
00:11:57,480 --> 00:12:00,880
e poi modificheremo questo codice, quindi cancelleremo.

153
00:12:00,880 --> 00:12:06,070
Vedremo se il piatto non è nullo,

154
00:12:06,070 --> 00:12:10,085
allora restituiranno il piatto qui.

155
00:12:10,085 --> 00:12:12,495
Quindi, se il piatto non è nullo,

156
00:12:12,495 --> 00:12:16,700
il wat che gestiremmo questo è il seguente.

157
00:12:16,700 --> 00:12:24,975
Quindi, dovremo entrare e cancellare ciascuno dei commenti.

158
00:12:24,975 --> 00:12:36,380
Quindi, diremo per (var i =

159
00:12:36,380 --> 00:12:49,940
(dish.comments.length -1) i> = 0; i—).

160
00:12:49,940 --> 00:12:55,860
Quindi, stiamo letteralmente entrando e rimuovendo ogni commento.

161
00:12:55,860 --> 00:12:56,380
Quindi, diremo

162
00:12:56,380 --> 00:13:11,370
dish.comments.id (dish.comments [i]. _id).

163
00:13:11,370 --> 00:13:15,060
Diremo di rimuovere.

164
00:13:15,060 --> 00:13:19,490
Quindi, stiamo andando a rimuovere ciascuno dei piatti,

165
00:13:19,490 --> 00:13:22,520
uno sotto ciascuno dei commenti uno per uno.

166
00:13:23,420 --> 00:13:26,910
Quindi, questo è ciò che faremo ai commenti.

167
00:13:26,910 --> 00:13:30,600
Poi, una volta che abbiamo rimosso tutti i commenti per il piatto,

168
00:13:30,600 --> 00:13:34,800
allora dovremo salvare il piatto e poi rimandare indietro.

169
00:13:34,800 --> 00:13:38,345
Quindi, prima anche quando modifichiamo il piatto,

170
00:13:38,345 --> 00:13:39,760
questo è quello che abbiamo fatto qui.

171
00:13:39,760 --> 00:13:43,250
Quindi, ho intenzione di copiare questa parte,

172
00:13:43,610 --> 00:13:46,415
e poi venire qui,

173
00:13:46,415 --> 00:13:52,060
e poi dire dish.save,

174
00:13:52,060 --> 00:13:57,085
poi restituiremo il piatto

175
00:13:57,085 --> 00:14:02,470
qui per indicare il piatto aggiornato che viene restituito qui.

176
00:14:02,470 --> 00:14:05,130
Quindi, questo è il modo in cui cancelleremo i commenti.

177
00:14:05,130 --> 00:14:07,225
Quindi, qui stiamo entrando,

178
00:14:07,225 --> 00:14:10,800
ora non c'è un modo semplice per estrarre letteralmente

179
00:14:10,800 --> 00:14:15,330
tutti i commenti dall'array quando hai un sottodocumento.

180
00:14:15,330 --> 00:14:19,680
Quindi, devi entrare ed eliminare ogni documento secondario uno per uno.

181
00:14:19,680 --> 00:14:22,720
Quindi, questo è quello che sto facendo in questo ciclo for qui.

182
00:14:22,720 --> 00:14:27,500
Quindi, sto dicendo per (var i = dish.comments.length).

183
00:14:27,500 --> 00:14:31,270
Quindi, sto guardando la matrice di commenti e poi partendo

184
00:14:31,270 --> 00:14:35,430
dall'ultimo commento in quell'array fino al primo commento,

185
00:14:35,430 --> 00:14:38,940
sto entrando e poi cancellando commento per commento qui utilizzando

186
00:14:38,940 --> 00:14:42,905
l'operazione di rimozione sul documento secondario.

187
00:14:42,905 --> 00:14:47,320
Quindi, il modo in cui accederemo a un documento secondario è dicendo

188
00:14:47,320 --> 00:14:53,720
piatto e poi commenti è il nome del campo e poi dico id qui.

189
00:14:53,720 --> 00:14:56,259
Quindi, questo è il modo in cui accedi a un documento secondario,

190
00:14:56,259 --> 00:15:02,115
e qui dentro specificherai l'id dei documenti secondari a cui stai tentando di accedere.

191
00:15:02,115 --> 00:15:06,310
Quindi, tutta questa cosa ti darà accesso al documento secondario,

192
00:15:06,310 --> 00:15:09,670
quindi chiamiamo il metodo di rimozione sul documento secondario

193
00:15:09,670 --> 00:15:14,320
e in modo che il documento secondario venga rimosso dalla matrice di documenti secondari.

194
00:15:14,320 --> 00:15:17,980
Poi dopo, dopo aver cancellato tutti i commenti,

195
00:15:17,980 --> 00:15:21,075
salverò le modifiche e il gioco è fatto.

196
00:15:21,075 --> 00:15:25,840
Quindi, tutti i miei commenti saranno cancellati da allora piatto.

197
00:15:25,840 --> 00:15:33,335
Ora, ci occuperemo del prossimo punto finale che è dishidComments/: CommentId.

198
00:15:33,335 --> 00:15:35,460
Quindi, in questo caso,

199
00:15:35,460 --> 00:15:42,410
inizieremo localizzando prima il piatto e poi dopo aver localizzato il piatto,

200
00:15:42,410 --> 00:15:47,460
quindi dobbiamo assicurarci che il piatto esista

201
00:15:47,460 --> 00:15:49,310
e quindi occuparci del piatto.

202
00:15:49,310 --> 00:15:52,320
Quindi, ho intenzione di eliminare questa parte,

203
00:15:52,320 --> 00:15:59,350
e poi diremo di copiare questa parte dal git che avevamo prima

204
00:16:09,140 --> 00:16:13,650
perché dobbiamo essere in grado di affrontare la situazione in

205
00:16:13,650 --> 00:16:20,095
cui il piatto non esiste o il piatto esiste ma i commenti non esistono,

206
00:16:20,095 --> 00:16:23,870
o il piatto stesso non esiste.

207
00:16:23,870 --> 00:16:28,280
Quindi, ci sono tre condizioni che devo testare.

208
00:16:28,280 --> 00:16:32,650
Quindi, diremo se (piatto! =

209
00:16:32,650 --> 00:16:51,180
null && dish.comments.id (req.params.commentId)! =

210
00:16:51,180 --> 00:17:00,545
null, il che significa che il piatto stesso esiste e anche i commenti esistono nel piatto,

211
00:17:00,545 --> 00:17:05,560
solo allora possiamo rimandare un commento specifico che è stato chiesto.

212
00:17:05,560 --> 00:17:07,680
Quindi, in tal caso,

213
00:17:07,680 --> 00:17:14,525
diremo StatusCode è 200, applicazione SetHeader json,

214
00:17:14,525 --> 00:17:19,895
e poi qui invieremo indietro dish.comments,

215
00:17:19,895 --> 00:17:25,300
e stiamo inviando questo particolare commento.

216
00:17:25,300 --> 00:17:29,350
Quindi, questo è il commento specifico che stiamo inviando max.

217
00:17:29,350 --> 00:17:37,925
Quindi, questo ci permetterà di recuperare un commento specifico dal set di commenti.

218
00:17:37,925 --> 00:17:46,895
Ora, diremo altro se piatto uguale a null.

219
00:17:46,895 --> 00:17:49,180
Quindi i piatti nulli,

220
00:17:49,180 --> 00:17:55,830
quindi ovviamente dovremo indicare che il piatto non esiste e

221
00:17:55,830 --> 00:18:02,105
l'ultima condizione è se il commento stesso è nullo.

222
00:18:02,105 --> 00:18:08,360
Quindi, in questo caso devo anche indicare che il commento stesso non esiste,

223
00:18:08,360 --> 00:18:13,130
quel particolare ID commento non esiste quindi in quel caso,

224
00:18:13,130 --> 00:18:15,355
dirò un nuovo

225
00:18:15,355 --> 00:18:23,930
commento di errore req.params.CommentId non trovato.

226
00:18:23,930 --> 00:18:25,520
Quindi, tre condizioni.

227
00:18:25,520 --> 00:18:31,045
In primo luogo, devi assicurarti prima che il piatto esista e che i commenti del piatto

228
00:18:31,045 --> 00:18:34,285
esistano, se lo fanno allora posso rimandare il commento specifico

229
00:18:34,285 --> 00:18:41,505
, in caso contrario, se il piatto stesso non esiste sul lato server nel database,

230
00:18:41,505 --> 00:18:44,340
allora indicherò che il piatto non esiste ma se

231
00:18:44,340 --> 00:18:47,300
il piatto non esiste esiste ma il commento non esiste,

232
00:18:47,300 --> 00:18:50,870
quindi invierò il messaggio dicendo che il commento non esiste.

233
00:18:50,870 --> 00:18:55,495
Quindi, si noti che devono gestire tutte le possibili condizioni qui per GET.

234
00:18:55,495 --> 00:18:57,500
Per il POST, ovviamente,

235
00:18:57,500 --> 00:19:01,895
l'operazione post non è supportata su questo endpoint,

236
00:19:01,895 --> 00:19:04,060
quindi diremo

237
00:19:08,900 --> 00:19:18,100
commenti barra req.params.CommentId.

238
00:19:18,950 --> 00:19:26,205
Quindi, l'operazione POST non è supportata su questo commento Id. Ora che mi dici di PUT?

239
00:19:26,205 --> 00:19:31,360
PUT è un caso più interessante qui.

240
00:19:31,360 --> 00:19:33,550
Quindi, ancora una volta anche per il put,

241
00:19:33,550 --> 00:19:40,205
devo gestire tutte queste possibili condizioni,

242
00:19:40,205 --> 00:19:49,150
quindi ho intenzione di guardare questo e dire, va bene per questo,

243
00:19:49,370 --> 00:19:55,045
fammi copiare tutto questo codice perché dobbiamo gestire

244
00:19:55,045 --> 00:20:03,260
tutte queste possibilità e poi ti dirò esattamente come gestiamo il caso PUT qui.

245
00:20:03,260 --> 00:20:06,685
Quindi, in caso di PUT,

246
00:20:06,685 --> 00:20:10,140
prima di tutto dobbiamo localizzare la carneficina.

247
00:20:10,140 --> 00:20:13,600
Quindi diranno che i piatti trovano da Id req param Id,

248
00:20:13,600 --> 00:20:20,845
quindi se il piatto esiste e il commento stesso esiste,

249
00:20:20,845 --> 00:20:23,080
allora so che posso aggiornare il commento.

250
00:20:23,080 --> 00:20:28,660
Altrimenti, queste due condizioni ovviamente devono essere curate,

251
00:20:28,660 --> 00:20:32,740
quel commento non esiste o il piatto non esiste.

252
00:20:32,740 --> 00:20:35,350
Questi due sono gia' gestiti da quel caso.

253
00:20:35,350 --> 00:20:38,190
Ora, ecco la situazione speciale che abbiamo.

254
00:20:38,190 --> 00:20:45,355
Quindi, se il piatto esiste e esiste anche il commento specifico che sto cercando,

255
00:20:45,355 --> 00:20:50,300
allora quello che so è che nel corpo del messaggio,

256
00:20:50,300 --> 00:20:53,760
viene specificato l'aggiornamento per il commento.

257
00:20:53,760 --> 00:20:55,625
Quindi ho bisogno di aggiornarlo.

258
00:20:55,625 --> 00:21:00,760
Quindi, da qualche parte qui faccio modifiche,

259
00:21:00,760 --> 00:21:02,910
faccio un piatto salva qui,

260
00:21:02,910 --> 00:21:10,110
quindi vado a copiare un po 'di questo codice da qui,

261
00:21:10,960 --> 00:21:17,680
ovviamente questa non è la cosa giusta, ma ho solo bisogno di una parte del codice da lì,

262
00:21:17,680 --> 00:21:19,940
quindi entrerò nel PUT.

263
00:21:19,940 --> 00:21:23,270
Lascia che lo incolla qui e

264
00:21:23,270 --> 00:21:27,340
poi ti dirò esattamente come gestiranno questo.

265
00:21:27,700 --> 00:21:31,200
Perche' ho bisogno che il piatto salvi parte.

266
00:21:31,200 --> 00:21:35,950
Quindi, come gestiamo l'aggiornamento a un commento specifico?

267
00:21:35,950 --> 00:21:39,510
Quindi, per l'aggiornamento a un commento specifico,

268
00:21:39,510 --> 00:21:45,265
quello che sappiamo è che questo commento deve essere aggiornato,

269
00:21:45,265 --> 00:21:49,900
quindi sappiamo che il piatto esiste e il commento stesso esiste.

270
00:21:49,900 --> 00:21:53,885
Voglio aggiornare i campi della corrente.

271
00:21:53,885 --> 00:21:56,690
Ora, se esiste già un commento, non voglio

272
00:21:56,690 --> 00:21:59,530
consentire all'utente di cambiare l'autore del commento,

273
00:21:59,530 --> 00:22:00,890
l'autore dovrebbe mantenere.

274
00:22:00,890 --> 00:22:09,090
Gli unici due campi che consentirei all'aggiornamento dell'utente è la valutazione.

275
00:22:09,090 --> 00:22:12,380
Quindi all'interno del corpo del messaggio PUT in arrivo,

276
00:22:12,380 --> 00:22:15,089
posso includere

277
00:22:15,089 --> 00:22:17,680
la valutazione aggiornata

278
00:22:21,830 --> 00:22:28,110
o il commento aggiornato.

279
00:22:28,110 --> 00:22:33,475
Queste sono le uniche due cose che permetterò all'utente di cambiare.

280
00:22:33,475 --> 00:22:40,190
Quindi, se la proprietà rating ies corpo indiretto chiamare che il corpo

281
00:22:40,190 --> 00:22:47,940
conterrà l'aggiornamento che stiamo cercando di farlo in questo caso diremo piatto.

282
00:22:48,240 --> 00:22:51,460
Quindi diremo commenti piatto,

283
00:22:51,460 --> 00:22:54,000
quindi lasciatemi solo copiare questa parte.

284
00:22:54,000 --> 00:22:56,980
Commento piatto commento Id.

285
00:22:56,980 --> 00:23:02,770
Ora questo è un modo semplice per gestire questo problema qui.

286
00:23:05,950 --> 00:23:11,525
Poiché non esiste un modo specifico di aggiornare

287
00:23:11,525 --> 00:23:16,655
un commento specifico che si trova in un documento secondario,

288
00:23:16,655 --> 00:23:19,330
non esiste un metodo specifico per farlo.

289
00:23:19,330 --> 00:23:24,950
Quindi questa è la soluzione che ho trovato che sembra funzionare per noi,

290
00:23:24,950 --> 00:23:32,820
quindi diremo commenti del piatto req parametro commento Id rating uguale a req body.rating.

291
00:23:34,700 --> 00:23:37,640
Quindi aggiornerò la valutazione.

292
00:23:37,640 --> 00:23:42,420
Allo stesso modo, se il commento esiste lì,

293
00:23:42,420 --> 00:23:51,995
allora dirò req comment Id comment req body comment.

294
00:23:51,995 --> 00:23:57,655
Quindi, questo è il modo in cui sto per aggiornare la valutazione e il commento,

295
00:23:57,655 --> 00:24:00,230
e una volta dico su aggiornato la valutazione e il commento,

296
00:24:00,230 --> 00:24:02,155
e salveranno il piatto,

297
00:24:02,155 --> 00:24:08,140
e poi una volta che salverò il piatto, poi invierò indietro la risposta.

298
00:24:08,140 --> 00:24:15,120
Quindi, nota che questo è l'unico modo che ho trovato che è abbastanza facile da

299
00:24:15,120 --> 00:24:22,785
aggiornare un documento secondario incorporato all'interno di un documento di Mongoose.

300
00:24:22,785 --> 00:24:28,520
Non esiste un modo esplicito che Mongoose supporti per l'aggiornamento di un documento incorporato.

301
00:24:28,520 --> 00:24:34,275
Quindi questa è la soluzione che ho trovato che ci consente di eseguire questa operazione.

302
00:24:34,275 --> 00:24:38,825
Ora per l'operazione di eliminazione.

303
00:24:38,825 --> 00:24:43,940
Per l'operazione di eliminazione stiamo eliminando solo un

304
00:24:43,940 --> 00:24:48,880
commento specifico, quindi prenderò queste informazioni

305
00:24:48,880 --> 00:24:53,915
dal deleter per tutti i commenti

306
00:24:53,915 --> 00:24:55,880
e invece di eliminare tutti i commenti,

307
00:24:55,880 --> 00:24:58,190
cancellerò solo un commento specifico.

308
00:24:58,190 --> 00:25:03,095
Quindi, lasciami copiare dalla cancellazione.

309
00:25:03,095 --> 00:25:07,920
Lasciami incollare qui e poi aggiorneremo questo.

310
00:25:07,920 --> 00:25:13,910
Quindi, se sto cancellando un commento specifico quindi troverò prima il piatto.

311
00:25:13,910 --> 00:25:17,240
Se il piatto non è nullo,

312
00:25:17,240 --> 00:25:21,480
ricorda che in questa situazione devo gestire sia il piatto che

313
00:25:21,480 --> 00:25:26,395
non essendo nullo sia anche il commento non essendo nullo.

314
00:25:26,395 --> 00:25:29,150
Quindi, dirò se il

315
00:25:32,890 --> 00:25:39,840
piatto non è uguale a null e il parametro id dei commenti del piatto non è uguale a null,

316
00:25:39,840 --> 00:25:44,335
allora so che ho un commento specifico che voglio eliminare.

317
00:25:44,335 --> 00:25:45,850
Non sto cancellando tutti i commenti,

318
00:25:45,850 --> 00:25:49,770
sto cancellando solo un commento specifico qui.

319
00:25:49,770 --> 00:25:58,700
Quindi, dirò i commenti del piatto id e poi sto cancellando il commento specifico qui che

320
00:25:58,700 --> 00:26:07,780
è req.params.CommentId e rimuovo

321
00:26:07,780 --> 00:26:14,565
quel particolare commento e poi salverò il piatto aggiornato e poi andrò avanti con quello.

322
00:26:14,565 --> 00:26:19,225
Ora, l'altra parte di cui ho bisogno per gestire entrambe le situazioni.

323
00:26:19,225 --> 00:26:23,180
Quindi, lasciami copiare questa parte se il piatto non è uguale a null e

324
00:26:23,180 --> 00:26:28,420
così via e poi sostituisci questo qui.

325
00:26:28,420 --> 00:26:33,480
Quindi, se il piatto è nullo, ti rimanderò l'errore dicendo che il piatto non esiste.

326
00:26:33,480 --> 00:26:37,640
Se il commento è nullo, ti rimanderò l'errore dicendo che il commento non esiste.

327
00:26:37,640 --> 00:26:39,520
Quindi, questo è tutto,

328
00:26:39,520 --> 00:26:41,770
questo è l'aggiornamento che sto facendo qui.

329
00:26:41,770 --> 00:26:44,395
Per eliminare un commento specifico,

330
00:26:44,395 --> 00:26:47,670
prima assicurerò che il piatto e il commento

331
00:26:47,670 --> 00:26:52,040
esistano, quindi cancellerò il commento specifico e poi salverò

332
00:26:52,040 --> 00:26:54,520
le modifiche al piatto e poi procederò

333
00:26:54,520 --> 00:27:00,315
con la gestione del resto dei casi, il gioco è fatto.

334
00:27:00,315 --> 00:27:05,310
Salviamo le modifiche e poi guardiamo come funziona.

335
00:27:05,310 --> 00:27:07,210
Andando al terminale,

336
00:27:07,210 --> 00:27:12,150
vedo che il server MongoDB non è attivo e funzionante, quindi iniziamo da lì.

337
00:27:12,150 --> 00:27:14,000
Assicurati, ovviamente,

338
00:27:14,000 --> 00:27:16,075
che il server MongoDB sia attivo e funzionante,

339
00:27:16,075 --> 00:27:19,070
avviamo anche il nostro server express.

340
00:27:19,890 --> 00:27:23,165
Una volta che il server espresso è attivo e funzionante,

341
00:27:23,165 --> 00:27:27,185
quello che faremo è ora stiamo guardando specificamente

342
00:27:27,185 --> 00:27:32,420
i commenti e quindi eseguendo operazioni sui commenti.

343
00:27:32,420 --> 00:27:36,320
Quindi, andiamo al Postman e

344
00:27:36,320 --> 00:27:44,540
poi controllare quello che abbiamo nel database e poi provare a modificare i commenti.

345
00:27:44,540 --> 00:27:47,760
Quindi, eccomi qui a Postman,

346
00:27:47,760 --> 00:27:53,265
quindi fammi prima prendere i piatti e ora vedo che i piatti sono tutti vuoti.

347
00:27:53,265 --> 00:28:02,385
Quindi lasciatemi postare un piatto alla lista di piatti, quindi lasciatemi postare un piatto.

348
00:28:02,385 --> 00:28:04,860
Ricordiamo che abbiamo questo piatto lei,

349
00:28:04,860 --> 00:28:11,540
così nel mio postino avevo già fatto che per l'esercizio precedente.

350
00:28:11,540 --> 00:28:16,160
Sto solo andando a selezionare quello e poi postare quel piatto e poi si

351
00:28:16,160 --> 00:28:21,205
vede che quel piatto particolare è stato postato qui, giù qui sotto.

352
00:28:21,205 --> 00:28:25,060
Puoi vedere che il piatto è stato creato proprio lì.

353
00:28:25,060 --> 00:28:33,970
Fammi ora copiare quel particolare documento e poi vado a

354
00:28:33,970 --> 00:28:45,505
prendere quel piatto qui.

355
00:28:45,505 --> 00:28:49,920
Quindi, vedete che quel piatto in particolare esiste qui.

356
00:28:49,920 --> 00:28:52,575
Per prima cosa, otteniamo tutti i commenti.

357
00:28:52,575 --> 00:28:55,480
Quindi, se faccio un get sui commenti si nota che

358
00:28:55,480 --> 00:28:58,370
tutti i commenti per quel piatto particolare sono stati restituiti.

359
00:28:58,370 --> 00:29:02,195
Possiamo fare il post e l'eliminazione anche.

360
00:29:02,195 --> 00:29:05,865
Facciamo un put su quello e ovviamente non puoi fare un put on

361
00:29:05,865 --> 00:29:09,960
back in modo da notare che l'operazione put non funziona su quello.

362
00:29:09,960 --> 00:29:13,110
Pubblichiamo un nuovo commento.

363
00:29:13,110 --> 00:29:18,070
Quindi, per pubblicare un nuovo commento andremo nel corpo,

364
00:29:18,380 --> 00:29:28,990
e poi lasciami tagliare tutti questi e poi modificheremo uno

365
00:29:28,990 --> 00:29:31,130
dei commenti e poi

366
00:29:35,790 --> 00:29:40,045
proveremo a postare quel commento.

367
00:29:40,045 --> 00:29:45,130
Quindi, diremo voto tre e poi

368
00:29:45,130 --> 00:29:56,110
diremo commento di prova, utente di prova.

369
00:29:56,110 --> 00:29:58,425
Pubblichiamo questo commento.

370
00:29:58,425 --> 00:30:00,190
Quando pubblichi questo commento,

371
00:30:00,190 --> 00:30:05,920
vedi che il piatto di aggiornamento è stato restituito qui e vedi che all'interno di

372
00:30:05,920 --> 00:30:14,530
questo piatto vedi che il nuovo commento è stato incluso in lì.

373
00:30:14,530 --> 00:30:20,335
Quindi, copiamo tutta questa faccenda.

374
00:30:20,335 --> 00:30:27,515
Ora, cercheremo di ottenere quel particolare commento che abbiamo appena inserito.

375
00:30:27,515 --> 00:30:31,440
Per quel particolare commento questo è l'id di quel commento.

376
00:30:31,440 --> 00:30:35,180
Quindi fammi copiare l'id per quel commento specifico.

377
00:30:35,180 --> 00:30:38,545
Tornando a Postman,

378
00:30:38,545 --> 00:30:43,915
fammi provare a recuperare quel commento specifico facendo un'operazione get.

379
00:30:43,915 --> 00:30:48,380
Lì vedete che quel particolare commento è stato recuperato qui.

380
00:30:48,380 --> 00:30:52,050
Ora, se stai cercando di fare un post su questo, che non funzionerà

381
00:30:52,050 --> 00:30:56,445
quindi ovviamente vedi che l'operazione post non è consentita su questo.

382
00:30:56,445 --> 00:31:01,370
Facciamo un'operazione put,

383
00:31:03,860 --> 00:31:06,385
su quel particolare commento.

384
00:31:06,385 --> 00:31:10,010
Quindi, se dovessi mettere l'operazione nel corpo,

385
00:31:10,390 --> 00:31:18,285
sto per dire commento di test aggiornato.

386
00:31:18,285 --> 00:31:23,200
Quindi, ho intenzione di aggiornare il campo di commento di quel commento.

387
00:31:23,200 --> 00:31:28,745
Se stai dicendo di mettere su che vedrai che per il commento specifico,

388
00:31:28,745 --> 00:31:33,670
il commento è stato aggiornato per riflettere il commento di test aggiornato.

389
00:31:33,670 --> 00:31:39,515
Quindi, vedi che anche l'operazione put sul campo commenti funziona correttamente.

390
00:31:39,515 --> 00:31:42,820
Eliminiamo quel commento,

391
00:31:42,820 --> 00:31:46,660
quindi posso eliminare il commento e poi quando elimino il commento

392
00:31:46,660 --> 00:31:50,475
vedrai che quel commento è scomparso dall'elenco dei commenti.

393
00:31:50,475 --> 00:31:53,915
Quindi, vedi che anche l'operazione di eliminazione funziona.

394
00:31:53,915 --> 00:31:55,970
Cancelliamo tutti i commenti.

395
00:31:55,970 --> 00:32:00,595
Quindi ho intenzione di entrare e cancellare tutti i commenti.

396
00:32:00,595 --> 00:32:04,650
Poi si vede che tutti i commenti sono stati eliminati,

397
00:32:04,650 --> 00:32:09,380
e così si vede che l'area commenti è ora vuota.

398
00:32:09,380 --> 00:32:13,050
Quindi, ora puoi vederli tutte le

399
00:32:13,050 --> 00:32:14,905
operazioni get, put, post ed delete sui

400
00:32:14,905 --> 00:32:21,064
piatti/dishid/commenti

401
00:32:21,064 --> 00:32:25,455
e i dishid/commenti/commenti/commentId,

402
00:32:25,455 --> 00:32:29,710
gli endpoint API REST funzionano come previsto.

403
00:32:29,710 --> 00:32:32,670
Quindi con questo completiamo questo esercizio.

404
00:32:32,670 --> 00:32:38,365
Quindi, in questo esercizio abbiamo completato l'implementazione dei piatti barra,

405
00:32:38,365 --> 00:32:42,395
endpoint API REST e supportato fino a

406
00:32:42,395 --> 00:32:47,070
consentirci di manipolare un singolo piatto,

407
00:32:47,070 --> 00:32:48,730
la raccolta di piatti,

408
00:32:48,730 --> 00:32:52,165
un singolo commento e anche la raccolta di commenti.

409
00:32:52,165 --> 00:32:56,930
Questo è un buon momento per fare un commit git con il messaggio,

410
00:32:56,930 --> 00:33:02,600
express, REST API con Mongoose parte due.