1
00:00:03,950 --> 00:00:09,405
A segunda parte deste exercício lida com

2
00:00:09,405 --> 00:00:15,340
os vários get put post e excluir operações em sub-documentos dentro do documento.

3
00:00:15,340 --> 00:00:19,380
Como vimos no exemplo para pratos,

4
00:00:19,380 --> 00:00:26,680
vimos que os comentários são incluídos dentro do próprio prato como um sub-documento,

5
00:00:26,680 --> 00:00:31,680
na forma como definimos tanto o esquema de comentário quanto o esquema de prato,

6
00:00:31,680 --> 00:00:35,150
e então definimos o modelo de prato, incluindo o esquema de comentário

7
00:00:35,150 --> 00:00:38,880
no esquema prato como uma matriz de comentários.

8
00:00:38,880 --> 00:00:43,580
E vimos no exercício anterior como os comentários são colocados dentro de

9
00:00:43,580 --> 00:00:50,990
uma matriz na forma de uma matriz de documentos dentro de cada documento prato.

10
00:00:50,990 --> 00:00:55,525
Então, como fazemos modificações nos próprios comentários?

11
00:00:55,525 --> 00:00:59,590
Como obtemos toda a lista de comentários para um prato?

12
00:00:59,590 --> 00:01:06,515
Como modificamos um comentário específico no prato e assim por diante?

13
00:01:06,515 --> 00:01:10,820
Então, isso é o que vamos ver sobre como

14
00:01:10,820 --> 00:01:16,130
apoiá-los usando os vários get put post e excluir operações sobre

15
00:01:16,130 --> 00:01:22,385
os pratos pratos barra prato ID barra comentários e os pratos

16
00:01:22,385 --> 00:01:29,935
barra prato ID barra comentários barra comentário barra comentário ID REST API endpoints.

17
00:01:29,935 --> 00:01:32,885
Para começar este exercício,

18
00:01:32,885 --> 00:01:35,735
novamente, voltando para o roteador de prato,

19
00:01:35,735 --> 00:01:44,170
eles já viram como lidamos com o endpoint de barra e o endpoint de ID de prato de barra.

20
00:01:44,170 --> 00:01:50,300
Agora, muito desse trabalho que fazemos aqui já é útil para nós,

21
00:01:50,300 --> 00:01:53,855
então o que eu vou fazer é copiar esse código,

22
00:01:53,855 --> 00:02:01,070
e então vamos editar esse código apropriadamente para lidar com os comentários e o ID do comentário.

23
00:02:01,070 --> 00:02:04,250
Então eu vou copiar este código inteiro que temos

24
00:02:04,250 --> 00:02:08,750
aqui tanto para a barra e a barra dourada ID prato,

25
00:02:08,750 --> 00:02:14,300
e então vamos colá-lo logo abaixo aqui novamente.

26
00:02:14,300 --> 00:02:17,795
E então entraremos e modificaremos cada um deles.

27
00:02:17,795 --> 00:02:21,470
Então temos visto que se você olhar para trás,

28
00:02:21,470 --> 00:02:27,800
o primeiro é lidar com a barra que será montado no ponto final de pratos de barra.

29
00:02:27,800 --> 00:02:30,905
E o próximo é lidar com a identificação da placa.

30
00:02:30,905 --> 00:02:37,410
Assim, o terceiro deve ser lidar com barra prato ID barra comentários.

31
00:02:37,410 --> 00:02:39,060
Então indo para baixo aqui,

32
00:02:39,060 --> 00:02:49,080
este terceiro prato rota roteador seria slash prato ID slash comentários.

33
00:02:49,080 --> 00:02:51,300
E, em seguida, o último, é claro,

34
00:02:51,300 --> 00:02:56,610
seria barra prato ID barra

35
00:02:56,610 --> 00:03:05,670
comentários e, em seguida, barra dois pontos ID comentário.

36
00:03:05,670 --> 00:03:09,289
Então, agora que atualizamos essas rotas aqui,

37
00:03:09,289 --> 00:03:12,380
agora o próximo passo é entrar e corrigir

38
00:03:12,380 --> 00:03:16,310
o código no get put post e excluir operações aqui.

39
00:03:16,310 --> 00:03:22,025
Então, vamos começar com a barra prato ID barra comentário endpoint.

40
00:03:22,025 --> 00:03:25,530
Então, no caso da barra ID barra comentários endpoint,

41
00:03:25,530 --> 00:03:31,425
então vamos fazer pratos encontrar, mas em vez de dizer pratos encontrar,

42
00:03:31,425 --> 00:03:38,100
vamos fazer pratos encontrar por

43
00:03:38,100 --> 00:03:45,595
ID e assim vamos encontrar o prato específico que estamos procurando.

44
00:03:45,595 --> 00:03:53,335
Então, aqui, vamos procurar que req params prato ID,

45
00:03:53,335 --> 00:03:57,820
então vamos primeiro procurar o prato,

46
00:03:57,820 --> 00:04:02,900
e assim isso irá retornar um prato específico.

47
00:04:02,900 --> 00:04:06,865
Então, quando ele retorna esse prato específico aqui,

48
00:04:06,865 --> 00:04:13,475
então o que eles vão verificar para dentro aqui

49
00:04:13,475 --> 00:04:20,765
é que se prato não é igual a nulo.

50
00:04:20,765 --> 00:04:24,169
É bem possível que o prato não exista, por

51
00:04:24,169 --> 00:04:28,000
isso, se procurarmos um prato específico com uma identificação de prato,

52
00:04:28,000 --> 00:04:29,495
esse prato pode não existir,

53
00:04:29,495 --> 00:04:35,360
por isso temos de nos preocupar em lidar com essa situação em particular.

54
00:04:35,360 --> 00:04:39,590
Então vamos lidar com essa parte dentro aqui,

55
00:04:39,590 --> 00:04:43,985
e então se não é nulo, então isso significa que o prato existe.

56
00:04:43,985 --> 00:04:51,125
Então eu vou cortar isso e depois colá-lo lá dentro.

57
00:04:51,125 --> 00:04:54,150
E então, neste caso,

58
00:04:54,150 --> 00:04:56,940
já que o prato não é nulo,

59
00:04:56,940 --> 00:05:02,300
então vamos retornar o código de status e o cabeçalho do conjunto e, em

60
00:05:02,300 --> 00:05:07,755
seguida, este aqui nós estaremos retornando comentários de prato,

61
00:05:07,755 --> 00:05:13,685
porque nós somos convidados a apenas retornar os comentários para aquele prato em particular, então vamos dizer,

62
00:05:13,685 --> 00:05:16,365
“Pratos encontrar por ID,

63
00:05:16,365 --> 00:05:20,390
em seguida, req parâmetros ID prato e, em seguida, prato.”

64
00:05:20,390 --> 00:05:25,540
E assim vamos retornar os comentários do prato aqui.

65
00:05:25,540 --> 00:05:30,320
Caso contrário, então esta é a outra parte.

66
00:05:30,320 --> 00:05:33,500
Então, o que significa que o prato não existe.

67
00:05:33,500 --> 00:05:35,295
Então, neste caso,

68
00:05:35,295 --> 00:05:43,095
nós construiria um erro aqui dizendo novos erros e, em seguida, vamos dizer

69
00:05:43,095 --> 00:05:56,515
prato req params prato ID não encontrado.

70
00:05:56,515 --> 00:05:59,840
Então este prato em particular não foi encontrado,

71
00:05:59,840 --> 00:06:04,100
então, obviamente, não seremos capazes de retornar os comentários para o prato inexistente.

72
00:06:04,100 --> 00:06:05,560
Então, neste caso,

73
00:06:05,560 --> 00:06:09,740
então vamos criar um novo objeto de erro e, em seguida, vamos

74
00:06:09,740 --> 00:06:15,090
definir o status no objeto de erro para 404.

75
00:06:15,090 --> 00:06:17,855
Novamente, este é 404 não encontrado,

76
00:06:17,855 --> 00:06:23,420
e então vamos retornar próximo erro.

77
00:06:23,420 --> 00:06:24,990
Agora, por que fazemos isso?

78
00:06:24,990 --> 00:06:29,885
Porque se você retornar isso como um erro, como você lembrará,

79
00:06:29,885 --> 00:06:33,665
isso será tratado pelo seu arquivo app.js,

80
00:06:33,665 --> 00:06:35,565
portanto, no arquivo app.js,

81
00:06:35,565 --> 00:06:37,220
bem na parte inferior aqui,

82
00:06:37,220 --> 00:06:40,700
temos o manipulador de erros aqui.

83
00:06:40,700 --> 00:06:42,685
Então, quando ele vem aqui,

84
00:06:42,685 --> 00:06:46,560
isso irá definir o resto ou status para status de ponto de erro,

85
00:06:46,560 --> 00:06:48,410
que tínhamos definido como 404, de

86
00:06:48,410 --> 00:06:49,900
modo que é o que será retornado,

87
00:06:49,900 --> 00:06:56,720
e então ele vai simplesmente pegar esse erro e então renderizar esse erro aqui.

88
00:06:56,720 --> 00:07:01,020
Então isso vai cuidar de renderizar os erros.

89
00:07:01,020 --> 00:07:07,080
Então, isso retornará a mensagem de erro de volta ao nosso cliente.

90
00:07:07,080 --> 00:07:09,490
Isso é o que estamos invocando aqui,

91
00:07:09,490 --> 00:07:11,090
então se o prato não existe,

92
00:07:11,090 --> 00:07:15,475
vamos apenas retornar esse erro aqui da operação get.

93
00:07:15,475 --> 00:07:19,475
Agora, para o post em caso de post,

94
00:07:19,475 --> 00:07:24,920
estamos esperando que eles seriam

95
00:07:24,920 --> 00:07:30,980
devolvidos um ID prato e, em seguida, vamos olhar para o prato,

96
00:07:30,980 --> 00:07:35,840
e então vamos tomar o conjunto de comentários

97
00:07:35,840 --> 00:07:41,555
do corpo e, em seguida, empurrá-lo para o prato lá.

98
00:07:41,555 --> 00:07:46,375
Então vamos dizer pratos, novamente, aqui,

99
00:07:46,375 --> 00:07:52,750
teremos que fazer o achado por id porque estamos procurando o prato específico aqui.

100
00:07:52,750 --> 00:07:59,485
Então, para o post, vamos dizer prato encontrar por ID, em seguida, prato,

101
00:07:59,485 --> 00:08:01,750
e assim dentro aqui,

102
00:08:01,750 --> 00:08:04,060
se o prato existe,

103
00:08:04,060 --> 00:08:06,555
então vamos lidar com o prato adequadamente.

104
00:08:06,555 --> 00:08:10,360
Caso contrário, teremos que enviar a mensagem de erro.

105
00:08:10,360 --> 00:08:16,730
Então deixe-me copiar esta parte do “get “e então,

106
00:08:16,730 --> 00:08:20,710
vamos substituir isto aqui.

107
00:08:22,130 --> 00:08:25,155
Então, obviamente, se o prato não existe,

108
00:08:25,155 --> 00:08:27,165
então nós vamos retornar este erro aqui,

109
00:08:27,165 --> 00:08:31,035
mas se o prato existe, nesse caso,

110
00:08:31,035 --> 00:08:35,930
vamos retornar o código de status 200 set header.

111
00:08:35,930 --> 00:08:41,835
Mas antes de passar para trás o valor,

112
00:08:41,835 --> 00:08:50,400
o que eu vou fazer é dizer comentários prato,

113
00:08:50,400 --> 00:08:55,020
então estamos postando um novo conjunto de comentários para o prato.

114
00:08:55,130 --> 00:09:02,790
Então, vamos dizer comentários prato empurrar corpo req.

115
00:09:02,790 --> 00:09:07,785
Porque o corpo da mensagem contém todos os comentários que precisam ser empurrados aqui,

116
00:09:07,785 --> 00:09:13,890
e então, vamos dizer, “Dish save”.

117
00:09:13,890 --> 00:09:22,010
E então, se o salvamento retornar com sucesso com o prato aqui,

118
00:09:22,010 --> 00:09:27,030
então enviaremos o prato atualizado a partir daqui.

119
00:09:32,350 --> 00:09:40,600
Então, esta parte onde estamos construindo o código de status,

120
00:09:40,600 --> 00:09:49,750
vamos fazer isso aqui dentro e então vamos enviar a

121
00:09:54,320 --> 00:10:00,875
res.JSON de volta e o prato que obtivemos aqui.

122
00:10:00,875 --> 00:10:04,885
Então, o que estamos fazendo é que estamos salvando o prato aqui.

123
00:10:04,885 --> 00:10:11,430
Estamos primeiro empurrando os comentários para o prato lá,

124
00:10:11,430 --> 00:10:14,420
o novo conjunto de comentários para o prato aqui,

125
00:10:14,420 --> 00:10:19,210
e então estamos salvando o prato atualizado aqui.

126
00:10:19,210 --> 00:10:20,825
Então, após o salvamento,

127
00:10:20,825 --> 00:10:29,070
nós vamos estar devolvendo o prato atualizado de volta para o usuário aqui.

128
00:10:29,290 --> 00:10:32,125
Então, se houver um erro,

129
00:10:32,125 --> 00:10:37,370
então vamos lidar com o erro exatamente como fizemos aqui.

130
00:10:38,570 --> 00:10:41,420
Se o prato não existir, é claro,

131
00:10:41,420 --> 00:10:45,825
vamos retornar o erro dizendo que o prato não existe.

132
00:10:45,825 --> 00:10:47,475
Então, isto é para o posto.

133
00:10:47,475 --> 00:10:49,100
A operação PUT, é claro,

134
00:10:49,100 --> 00:10:51,680
não é suportada em pratos.

135
00:10:51,680 --> 00:10:53,140
Então, neste caso,

136
00:10:53,140 --> 00:10:56,210
estamos tentando executar a operação PUT

137
00:10:56,210 --> 00:11:06,550
nos pratos, req.params.dishid/comentários.

138
00:11:08,370 --> 00:11:10,980
Então, isso não é permitido.

139
00:11:10,980 --> 00:11:13,415
Então, é isso que estamos dizendo para a operação PUT.

140
00:11:13,415 --> 00:11:15,545
Para a operação de exclusão,

141
00:11:15,545 --> 00:11:19,130
o que faremos é primeiro encontrar o prato.

142
00:11:19,130 --> 00:11:22,275
Então, vamos dizer dish.Findbyid.

143
00:11:22,275 --> 00:11:27,785
Então, excluir significa que estamos removendo todos os comentários do prato,

144
00:11:27,785 --> 00:11:28,850
não o próprio prato,

145
00:11:28,850 --> 00:11:31,540
mas estamos removendo todos os comentários do prato.

146
00:11:31,540 --> 00:11:33,495
Então, neste caso,

147
00:11:33,495 --> 00:11:41,695
o que acabaríamos fazendo é a seguinte: então, se o prato não é nulo,

148
00:11:41,695 --> 00:11:47,345
lembre-se que precisamos lidar com isso, dizendo então prato.

149
00:11:47,345 --> 00:11:49,400
Se o prato não for nulo,

150
00:11:49,400 --> 00:11:53,080
então removeremos todos os comentários do prato.

151
00:11:53,080 --> 00:11:57,480
Então, eu vou copiar esse código e, em seguida, colá-lo aqui,

152
00:11:57,480 --> 00:12:00,880
e, em seguida, vamos editar este código, em seguida, excluir.

153
00:12:00,880 --> 00:12:06,070
Vamos ver se o prato não é nulo,

154
00:12:06,070 --> 00:12:10,085
então eles vão retornar o prato aqui.

155
00:12:10,085 --> 00:12:12,495
Então, se prato não é nulo,

156
00:12:12,495 --> 00:12:16,700
o wat que iria lidar com isso é o seguinte.

157
00:12:16,700 --> 00:12:24,975
Então, teremos que entrar e excluir cada um dos comentários.

158
00:12:24,975 --> 00:12:36,380
Então, vamos dizer para (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
Então, estamos literalmente entrando e removendo cada comentário.

161
00:12:55,860 --> 00:12:56,380
Então, vamos dizer

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
Vamos dizer remova.

164
00:13:15,060 --> 00:13:19,490
Então, vamos remover cada um dos pratos,

165
00:13:19,490 --> 00:13:22,520
um sob cada um dos comentários, um por um.

166
00:13:23,420 --> 00:13:26,910
Então, isso é o que faremos com os comentários.

167
00:13:26,910 --> 00:13:30,600
Então, uma vez que tenhamos removido todos os comentários para o prato,

168
00:13:30,600 --> 00:13:34,800
então teremos que salvar o prato e depois enviar de volta.

169
00:13:34,800 --> 00:13:38,345
Então, mais cedo também quando modificamos o prato,

170
00:13:38,345 --> 00:13:39,760
isso é o que fizemos aqui.

171
00:13:39,760 --> 00:13:43,250
Então, eu vou copiar esta parte,

172
00:13:43,610 --> 00:13:46,415
e depois vir aqui,

173
00:13:46,415 --> 00:13:52,060
e depois dizer dish.save,

174
00:13:52,060 --> 00:13:57,085
então vamos devolver o prato

175
00:13:57,085 --> 00:14:02,470
aqui para indicar o prato atualizado que está sendo devolvido aqui.

176
00:14:02,470 --> 00:14:05,130
Então, é assim que vamos excluir os comentários.

177
00:14:05,130 --> 00:14:07,225
Então, aqui estamos entrando,

178
00:14:07,225 --> 00:14:10,800
agora não há nenhuma maneira fácil de literalmente retirar

179
00:14:10,800 --> 00:14:15,330
todos os comentários da matriz quando você tem um subdocumento.

180
00:14:15,330 --> 00:14:19,680
Então, você tem que entrar e excluir cada subdocumento um por um.

181
00:14:19,680 --> 00:14:22,720
Então, isso é o que eu estou fazendo neste loop aqui.

182
00:14:22,720 --> 00:14:27,500
Então, eu estou dizendo para (var i=dish.comments.length).

183
00:14:27,500 --> 00:14:31,270
Então, eu estou olhando para a matriz de comentários e,

184
00:14:31,270 --> 00:14:35,430
em seguida, começando a partir do último comentário nessa matriz todo o caminho para o primeiro comentário,

185
00:14:35,430 --> 00:14:38,940
eu estou entrando e, em seguida, excluindo comentário por comentário aqui usando

186
00:14:38,940 --> 00:14:42,905
a operação de remoção no subdocumento.

187
00:14:42,905 --> 00:14:47,320
Então, a maneira que vamos acessar um subdocumento é dizendo

188
00:14:47,320 --> 00:14:53,720
prato e, em seguida, comentários é o nome do campo e, em seguida, eu digo id aqui.

189
00:14:53,720 --> 00:14:56,259
Então, é assim que você acessa um subdocumento,

190
00:14:56,259 --> 00:15:02,115
e dentro daqui você especificará o id dos subdocumentos que você está tentando acessar.

191
00:15:02,115 --> 00:15:06,310
Então, essa coisa toda lhe dará acesso ao subdocumento,

192
00:15:06,310 --> 00:15:09,670
e então chamamos o método remove no subdocumento,

193
00:15:09,670 --> 00:15:14,320
e assim que subdocumento será removido da matriz de subdocumentos.

194
00:15:14,320 --> 00:15:17,980
Então, depois disso, depois de excluirmos todos os comentários,

195
00:15:17,980 --> 00:15:21,075
vou salvar as alterações e é isso.

196
00:15:21,075 --> 00:15:25,840
Então, todos os meus comentários serão excluídos de então prato.

197
00:15:25,840 --> 00:15:33,335
Agora, vamos lidar com o próximo ponto final que é dishidComments/:commentid.

198
00:15:33,335 --> 00:15:35,460
Então, neste caso,

199
00:15:35,460 --> 00:15:42,410
vamos começar primeiro localizando o prato e depois de localizar o prato,

200
00:15:42,410 --> 00:15:47,460
então temos que ter certeza de que o prato existe,

201
00:15:47,460 --> 00:15:49,310
e depois lidar com o prato.

202
00:15:49,310 --> 00:15:52,320
Então, eu vou excluir esta parte,

203
00:15:52,320 --> 00:15:59,350
e então vamos dizer vamos copiar esta parte do git que tivemos anteriormente

204
00:16:09,140 --> 00:16:13,650
porque precisamos ser capazes de lidar com a

205
00:16:13,650 --> 00:16:20,095
situação em que o prato não existe ou o prato existe, mas os comentários não existem,

206
00:16:20,095 --> 00:16:23,870
ou o prato em si não existe.

207
00:16:23,870 --> 00:16:28,280
Então, há três condições que eu preciso testar.

208
00:16:28,280 --> 00:16:32,650
Então, vamos dizer se (prato! =

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
nulo, o que significa que o prato em si existe e também os comentários existem no prato,

211
00:17:00,545 --> 00:17:05,560
só então podemos enviar de volta um comentário específico que foi solicitado.

212
00:17:05,560 --> 00:17:07,680
Então, nesse caso,

213
00:17:07,680 --> 00:17:14,525
vamos dizer StatusCode é 200, json aplicativo SetHeader

214
00:17:14,525 --> 00:17:19,895
e, em seguida, aqui vamos enviar de volta dish.comments,

215
00:17:19,895 --> 00:17:25,300
e estamos enviando de volta este comentário em particular.

216
00:17:25,300 --> 00:17:29,350
Então, esse é o comentário específico que estamos enviando max.

217
00:17:29,350 --> 00:17:37,925
Então, isso nos permitirá recuperar um comentário específico do conjunto de comentários.

218
00:17:37,925 --> 00:17:46,895
Agora, vamos dizer outra coisa se prato igual a nulo.

219
00:17:46,895 --> 00:17:49,180
Então os pratos nulos,

220
00:17:49,180 --> 00:17:55,830
então, é claro, teremos que indicar que o prato não existe e

221
00:17:55,830 --> 00:18:02,105
a última condição é se o comentário em si é nulo.

222
00:18:02,105 --> 00:18:08,360
Então, nesse caso também eu tenho que indicar que o comentário em si não existe,

223
00:18:08,360 --> 00:18:13,130
esse ID de comentário particular não existe, então, nesse caso,

224
00:18:13,130 --> 00:18:15,355
eu direi novo

225
00:18:15,355 --> 00:18:23,930
comentário de erro req.params.commentid não encontrado.

226
00:18:23,930 --> 00:18:25,520
Então, três condições.

227
00:18:25,520 --> 00:18:31,045
Primeiro, você tem que ter certeza primeiro que o prato existe e os comentários do prato existem,

228
00:18:31,045 --> 00:18:34,285
se eles o fizerem, então eu posso enviar de volta o comentário específico

229
00:18:34,285 --> 00:18:41,505
, se não, se o prato em si não existe no lado do servidor no banco de dados,

230
00:18:41,505 --> 00:18:44,340
então eu vou indicar que o prato não existe, mas se

231
00:18:44,340 --> 00:18:47,300
o prato existe, mas o comentário não existe,

232
00:18:47,300 --> 00:18:50,870
então eu vou enviar de volta a mensagem dizendo que o comentário não existe.

233
00:18:50,870 --> 00:18:55,495
Então, observe que eles têm que lidar com todas as condições possíveis aqui para o GET.

234
00:18:55,495 --> 00:18:57,500
Para o POST, é claro,

235
00:18:57,500 --> 00:19:01,895
a operação de postagem não é suportada neste endpoint,

236
00:19:01,895 --> 00:19:04,060
então vamos dizer

237
00:19:08,900 --> 00:19:18,100
comentários barra req.params.commentId.

238
00:19:18,950 --> 00:19:26,205
Portanto, a operação POST não é suportada neste ID de comentário. E agora o PUT?

239
00:19:26,205 --> 00:19:31,360
PUT é um caso mais interessante aqui.

240
00:19:31,360 --> 00:19:33,550
Então, novamente, mesmo para colocar,

241
00:19:33,550 --> 00:19:40,205
eu tenho que lidar com todas essas condições possíveis,

242
00:19:40,205 --> 00:19:49,150
então eu vou olhar para isso e dizer, ok para isso,

243
00:19:49,370 --> 00:19:55,045
deixe-me copiar todo esse código porque nós temos que lidar com

244
00:19:55,045 --> 00:20:03,260
todas essas possibilidades e então eu vou te dizer exatamente como nós lidamos com o caso PUT aqui.

245
00:20:03,260 --> 00:20:06,685
Então, no caso de PUT,

246
00:20:06,685 --> 00:20:10,140
primeiro é claro que precisamos localizar a carnificina.

247
00:20:10,140 --> 00:20:13,600
Então eles vão dizer pratos encontrar por Id req param Id,

248
00:20:13,600 --> 00:20:20,845
em seguida, se o prato existe eo comentário em si existe,

249
00:20:20,845 --> 00:20:23,080
então eu sei que eu posso atualizar o comentário.

250
00:20:23,080 --> 00:20:28,660
Caso contrário, estas duas condições obviamente têm de ser atendidas,

251
00:20:28,660 --> 00:20:32,740
esse comentário não existe ou o prato não existe.

252
00:20:32,740 --> 00:20:35,350
Estes dois já são tratados por esse caso.

253
00:20:35,350 --> 00:20:38,190
Agora, aqui está a situação especial que temos.

254
00:20:38,190 --> 00:20:45,355
Então, se o prato existe e o comentário específico que eu estou procurando também existe,

255
00:20:45,355 --> 00:20:50,300
então o que eu sei é que no corpo da mensagem,

256
00:20:50,300 --> 00:20:53,760
a atualização para o comentário é especificada.

257
00:20:53,760 --> 00:20:55,625
Então eu preciso atualizar isso.

258
00:20:55,625 --> 00:21:00,760
Então, em algum lugar aqui

259
00:21:00,760 --> 00:21:02,910
eu faço modificações, eu faço um prato salvar aqui,

260
00:21:02,910 --> 00:21:10,110
então eu vou entrar e copiar um pouco deste código daqui, é

261
00:21:10,960 --> 00:21:17,680
claro que isso não é a coisa certa, mas eu só preciso de uma parte do código de lá,

262
00:21:17,680 --> 00:21:19,940
então eu vou entrar no PUT.

263
00:21:19,940 --> 00:21:23,270
Deixe-me colá-lo no lugar aqui e

264
00:21:23,270 --> 00:21:27,340
então eu vou te dizer exatamente como eles vão lidar com isso.

265
00:21:27,700 --> 00:21:31,200
Porque eu preciso da parte de salvar prato.

266
00:21:31,200 --> 00:21:35,950
Então, como lidamos com a atualização de um comentário específico?

267
00:21:35,950 --> 00:21:39,510
Então, para a atualização de um comentário específico,

268
00:21:39,510 --> 00:21:45,265
o que sabemos é que este comentário precisa ser atualizado,

269
00:21:45,265 --> 00:21:49,900
então sabemos que o prato existe e o comentário em si existe.

270
00:21:49,900 --> 00:21:53,885
Quero atualizar os campos da corrente.

271
00:21:53,885 --> 00:21:56,690
Agora, se um comentário já existe, então eu não quero

272
00:21:56,690 --> 00:21:59,530
permitir que o usuário altere o autor do comentário,

273
00:21:59,530 --> 00:22:00,890
o autor deve ser mantido.

274
00:22:00,890 --> 00:22:09,090
Os dois únicos campos que permitiria a atualização do usuário é a classificação.

275
00:22:09,090 --> 00:22:12,380
Assim, dentro do corpo da mensagem PUT de entrada,

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

277
00:22:15,089 --> 00:22:17,680
a classificação atualizada

278
00:22:21,830 --> 00:22:28,110
ou o comentário atualizado.

279
00:22:28,110 --> 00:22:33,475
Estas são as duas únicas coisas que permitirei que o usuário mude.

280
00:22:33,475 --> 00:22:40,190
Então, se o se a propriedade de classificação é corpo indireto para chamar que

281
00:22:40,190 --> 00:22:47,940
o corpo irá conter a atualização que estamos tentando fazê-lo neste caso, vamos dizer prato.

282
00:22:48,240 --> 00:22:51,460
Então vamos dizer comentários prato,

283
00:22:51,460 --> 00:22:54,000
então deixe-me apenas copiar esta parte.

284
00:22:54,000 --> 00:22:56,980
Id comentário comentário prato.

285
00:22:56,980 --> 00:23:02,770
Agora esta é uma maneira simples de lidar com esta questão aqui.

286
00:23:05,950 --> 00:23:11,525
Como não há nenhuma maneira específica de atualizar

287
00:23:11,525 --> 00:23:16,655
um comentário específico que está em um subdocumento,

288
00:23:16,655 --> 00:23:19,330
não há nenhum método específico para fazer isso.

289
00:23:19,330 --> 00:23:24,950
Então, esta é a solução que eu encontrei que parece funcionar para nós,

290
00:23:24,950 --> 00:23:32,820
então vamos dizer comentários prato req parâmetro comentário classificação Id igual a req body.rating.

291
00:23:34,700 --> 00:23:37,640
Então eu vou atualizar a classificação.

292
00:23:37,640 --> 00:23:42,420
Da mesma forma, se o comentário existe lá,

293
00:23:42,420 --> 00:23:51,995
então eu vou dizer req comentário Id comentário req corpo comentário.

294
00:23:51,995 --> 00:23:57,655
Então, é assim que eu vou estar atualizando a classificação e o comentário,

295
00:23:57,655 --> 00:24:00,230
e uma vez digo sobre atualizado a classificação e o comentário, e

296
00:24:00,230 --> 00:24:02,155
eles vão salvar o prato,

297
00:24:02,155 --> 00:24:08,140
e então uma vez que eu salvar o prato, em seguida, eu vou enviar de volta a resposta.

298
00:24:08,140 --> 00:24:15,120
Então, note que esta é a única maneira que eu encontrei que é fácil o suficiente

299
00:24:15,120 --> 00:24:22,785
para atualizar um subdocumento embutido dentro de um documento de Mangusto.

300
00:24:22,785 --> 00:24:28,520
Não há nenhuma maneira explícita que o Mangoose suporta para atualizar um documento incorporado.

301
00:24:28,520 --> 00:24:34,275
Então esta é a solução que eu encontrei que nos permite realizar esta operação.

302
00:24:34,275 --> 00:24:38,825
Agora, para a operação de exclusão.

303
00:24:38,825 --> 00:24:43,940
Para a operação de exclusão estamos excluindo apenas um

304
00:24:43,940 --> 00:24:48,880
comentário específico, então eu vou tomar esta informação

305
00:24:48,880 --> 00:24:53,915
do deleter para todos os comentários

306
00:24:53,915 --> 00:24:55,880
e em vez de excluir todos os comentários

307
00:24:55,880 --> 00:24:58,190
eu só vou ser excluir um comentário específico.

308
00:24:58,190 --> 00:25:03,095
Então, deixe-me copiar isso do deletar.

309
00:25:03,095 --> 00:25:07,920
Deixe-me colá-lo aqui e então atualizaremos isso.

310
00:25:07,920 --> 00:25:13,910
Então, se eu estou excluindo um comentário específico então eu vou primeiro encontrar o prato.

311
00:25:13,910 --> 00:25:17,240
Se o prato não é nulo,

312
00:25:17,240 --> 00:25:21,480
lembre-se que nesta situação eu tenho que lidar tanto com o prato

313
00:25:21,480 --> 00:25:26,395
não sendo nulo e também o comentário não ser nulo.

314
00:25:26,395 --> 00:25:29,150
Então, eu vou dizer se

315
00:25:32,890 --> 00:25:39,840
prato não igual a null e dish comentários id parâmetro não igual a null,

316
00:25:39,840 --> 00:25:44,335
então eu sei que eu tenho um comentário específico que eu quero excluir.

317
00:25:44,335 --> 00:25:45,850
Não estou excluindo todos os comentários,

318
00:25:45,850 --> 00:25:49,770
estou excluindo apenas um comentário específico aqui.

319
00:25:49,770 --> 00:25:58,700
Então, eu vou dizer prato comentários id e, em seguida, eu estou excluindo o comentário específico aqui que

320
00:25:58,700 --> 00:26:07,780
é req.params.commentid e remover

321
00:26:07,780 --> 00:26:14,565
esse comentário particular e, em seguida, eu vou salvar o prato atualizado e, em seguida, seguir em frente com isso.

322
00:26:14,565 --> 00:26:19,225
Agora, a outra parte eu preciso para lidar com ambas as situações.

323
00:26:19,225 --> 00:26:23,180
Então, deixe-me copiar esta parte senão prato não igual a nulo e

324
00:26:23,180 --> 00:26:28,420
assim por diante e, em seguida, substituir este aqui.

325
00:26:28,420 --> 00:26:33,480
Então, se o prato é nulo, então eu vou enviar de volta o erro dizendo que o prato não existe.

326
00:26:33,480 --> 00:26:37,640
Se o comentário é nulo, em seguida, eu vou enviar de volta o erro dizendo comentário não existe.

327
00:26:37,640 --> 00:26:39,520
Então, é isso,

328
00:26:39,520 --> 00:26:41,770
esta é a atualização que estou fazendo aqui.

329
00:26:41,770 --> 00:26:44,395
Para excluir um comentário específico,

330
00:26:44,395 --> 00:26:47,670
eu primeiro vou garantir que o prato eo comentário

331
00:26:47,670 --> 00:26:52,040
existem, então eu vou excluir o comentário específico e então eu vou salvar

332
00:26:52,040 --> 00:26:54,520
as alterações para o prato e,

333
00:26:54,520 --> 00:27:00,315
em seguida, continuar com o tratamento do resto dos casos, é isso.

334
00:27:00,315 --> 00:27:05,310
Vamos salvar as alterações e, em seguida, olhar para como isso funciona.

335
00:27:05,310 --> 00:27:07,210
Indo para o terminal,

336
00:27:07,210 --> 00:27:12,150
vejo o servidor MongoDB não está funcionando, então vamos começar por aí.

337
00:27:12,150 --> 00:27:14,000
Certifique-se, é claro, de

338
00:27:14,000 --> 00:27:16,075
que o servidor MongoDB está funcionando,

339
00:27:16,075 --> 00:27:19,070
vamos também iniciar o nosso servidor express.

340
00:27:19,890 --> 00:27:23,165
Uma vez que seu servidor express está funcionando,

341
00:27:23,165 --> 00:27:27,185
o que vamos fazer é agora olhar especificamente para

342
00:27:27,185 --> 00:27:32,420
os comentários e, em seguida, executar operações sobre os comentários.

343
00:27:32,420 --> 00:27:36,320
Então, vamos para o carteiro e, em

344
00:27:36,320 --> 00:27:44,540
seguida, verificar o que temos no banco de dados e, em seguida, tentar modificar os comentários.

345
00:27:44,540 --> 00:27:47,760
Então, aqui estou eu no Carteiro,

346
00:27:47,760 --> 00:27:53,265
então deixe-me primeiro pegar os pratos e agora vejo que os pratos estão todos vazios.

347
00:27:53,265 --> 00:28:02,385
Então deixe-me postar um prato para a lista de pratos então deixe-me postar um prato.

348
00:28:02,385 --> 00:28:04,860
Lembre-se que temos este prato dela,

349
00:28:04,860 --> 00:28:11,540
então no meu carteiro eu já tinha feito isso para o exercício anterior.

350
00:28:11,540 --> 00:28:16,160
Eu só vou selecionar isso e, em seguida, postar esse prato e então você

351
00:28:16,160 --> 00:28:21,205
vê que esse prato em particular foi postado aqui, abaixo aqui.

352
00:28:21,205 --> 00:28:25,060
Você pode ver que o prato foi criado ali mesmo.

353
00:28:25,060 --> 00:28:33,970
Deixe-me agora copiar esse ID prato particular e, em seguida, eu vou

354
00:28:33,970 --> 00:28:45,505
agora obter esse prato aqui.

355
00:28:45,505 --> 00:28:49,920
Então, você vê que esse prato em particular existe aqui.

356
00:28:49,920 --> 00:28:52,575
Primeiro, vamos fazer todos os comentários.

357
00:28:52,575 --> 00:28:55,480
Então, se eu fizer um get sobre os comentários que você percebe que

358
00:28:55,480 --> 00:28:58,370
todos os comentários para esse prato particular foram devolvidos.

359
00:28:58,370 --> 00:29:02,195
Podemos fazer o post e excluir também.

360
00:29:02,195 --> 00:29:05,865
Vamos colocar isso e, obviamente, você não pode colocar de

361
00:29:05,865 --> 00:29:09,960
volta, então você percebe que a operação de venda não funciona nisso.

362
00:29:09,960 --> 00:29:13,110
Vamos postar um novo comentário.

363
00:29:13,110 --> 00:29:18,070
Então, para postar um novo comentário, vamos para o corpo,

364
00:29:18,380 --> 00:29:28,990
e então deixe-me cortar todos esses e, em seguida, vamos editar um

365
00:29:28,990 --> 00:29:31,130
dos comentários e, em seguida,

366
00:29:35,790 --> 00:29:40,045
tentar postar esse comentário.

367
00:29:40,045 --> 00:29:45,130
Então, vamos dizer classificação três e, em seguida, vamos

368
00:29:45,130 --> 00:29:56,110
dizer comentário teste, teste usuário.

369
00:29:56,110 --> 00:29:58,425
Vamos postar este comentário.

370
00:29:58,425 --> 00:30:00,190
Quando você postar este comentário,

371
00:30:00,190 --> 00:30:05,920
você vê que o prato de atualização foi devolvido aqui e você vê que dentro

372
00:30:05,920 --> 00:30:14,530
deste prato você vê que o novo comentário foi incluído lá.

373
00:30:14,530 --> 00:30:20,335
Então, vamos copiar essa coisa toda.

374
00:30:20,335 --> 00:30:27,515
Agora, vamos tentar obter esse comentário específico que acabamos de inserir.

375
00:30:27,515 --> 00:30:31,440
Para esse comentário em particular este é o id desse comentário.

376
00:30:31,440 --> 00:30:35,180
Então deixe-me copiar o id para esse comentário específico.

377
00:30:35,180 --> 00:30:38,545
Voltando ao Carteiro,

378
00:30:38,545 --> 00:30:43,915
deixe-me tentar recuperar esse comentário específico fazendo uma operação get.

379
00:30:43,915 --> 00:30:48,380
Lá você vê que esse comentário em particular foi recuperado aqui.

380
00:30:48,380 --> 00:30:52,050
Agora, se você está tentando fazer um post sobre isso, que não vai funcionar

381
00:30:52,050 --> 00:30:56,445
então obviamente você vê que a operação pós-não é permitido sobre isso.

382
00:30:56,445 --> 00:31:01,370
Vamos fazer uma operação de venda,

383
00:31:03,860 --> 00:31:06,385
nesse comentário em particular.

384
00:31:06,385 --> 00:31:10,010
Então, se eu fosse colocar a operação no corpo,

385
00:31:10,390 --> 00:31:18,285
eu vou dizer comentário de teste atualizado.

386
00:31:18,285 --> 00:31:23,200
Então, eu vou atualizar o campo de comentários desse comentário.

387
00:31:23,200 --> 00:31:28,745
Se você está dizendo para colocar em que você vai ver que para o comentário específico,

388
00:31:28,745 --> 00:31:33,670
o comentário foi agora atualizado para refletir o comentário de teste atualizado.

389
00:31:33,670 --> 00:31:39,515
Então, você vê que a operação put no campo de comentários também funciona corretamente.

390
00:31:39,515 --> 00:31:42,820
Vamos excluir esse comentário,

391
00:31:42,820 --> 00:31:46,660
para que eu possa excluir o comentário e, em seguida, quando eu excluir o comentário você

392
00:31:46,660 --> 00:31:50,475
verá que esse comentário desapareceu da lista de comentários.

393
00:31:50,475 --> 00:31:53,915
Então, você vê que a operação de exclusão também funciona.

394
00:31:53,915 --> 00:31:55,970
Vamos apagar todos os comentários.

395
00:31:55,970 --> 00:32:00,595
Então eu vou entrar e apagar todos os comentários.

396
00:32:00,595 --> 00:32:04,650
Então você vê que todos os comentários foram excluídos,

397
00:32:04,650 --> 00:32:09,380
e assim você vê que a área de comentários está agora vazia.

398
00:32:09,380 --> 00:32:13,050
Então, agora você pode vê-los todas as

399
00:32:13,050 --> 00:32:14,905
operações de obter, colocar, postar e excluir sobre

400
00:32:14,905 --> 00:32:21,064
os pratos/DISHID/comentários

401
00:32:21,064 --> 00:32:25,455
e os pratos/Dishid/Comentários/Comentários/CommentID,

402
00:32:25,455 --> 00:32:29,710
REST API todos funcionam como esperado.

403
00:32:29,710 --> 00:32:32,670
Então, com isso, completamos este exercício.

404
00:32:32,670 --> 00:32:38,365
Então, neste exercício, concluímos a implementação dos pratos de barra,

405
00:32:38,365 --> 00:32:42,395
endpoint API REST e apoiado todo o caminho

406
00:32:42,395 --> 00:32:47,070
até nos permitir manipular um único prato,

407
00:32:47,070 --> 00:32:48,730
a coleção de pratos,

408
00:32:48,730 --> 00:32:52,165
um único comentário e também a coleção de comentários.

409
00:32:52,165 --> 00:32:56,930
Este é um bom momento para você fazer um git commit com a mensagem,

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