﻿1
00:00:01,210 --> 00:00:02,660
‫Instrutor: até

2
00:00:02,660 --> 00:00:04,860
‫agora nesta seção, falamos sobre

3
00:00:04,860 --> 00:00:06,940
‫modelos do Mongoose, operações CRUD

4
00:00:06,940 --> 00:00:09,660
‫com o Mongoose, fizemos muitas consultas e

5
00:00:09,660 --> 00:00:12,820
‫aprendemos sobre o pipeline de agregação, mas agora

6
00:00:12,820 --> 00:00:15,110
‫para os próximos dois vídeos, vamos

7
00:00:15,110 --> 00:00:18,860
‫voltar aos nossos dados modelar e aprender alguns recursos superúteis

8
00:00:18,860 --> 00:00:22,170
‫que o Mongoose nos oferece para modelar nossos dados.

9
00:00:22,170 --> 00:00:24,090
‫E o primeiro sobre o qual

10
00:00:24,090 --> 00:00:25,773
‫falaremos são as propriedades virtuais.

11
00:00:27,410 --> 00:00:29,973
‫E então vamos abrir nosso modelo de tour aqui.

12
00:00:31,050 --> 00:00:35,080
‫Tudo bem, agora as propriedades virtuais são basicamente campos que

13
00:00:35,080 --> 00:00:37,030
‫podemos definir em nosso

14
00:00:37,030 --> 00:00:39,150
‫esquema, mas que não serão persistentes.

15
00:00:39,150 --> 00:00:42,100
‫Portanto, eles não serão salvos no banco de

16
00:00:42,100 --> 00:00:44,720
‫dados para nos economizar algum espaço lá.

17
00:00:44,720 --> 00:00:46,140
‫E na maioria das

18
00:00:46,140 --> 00:00:49,260
‫vezes, é claro, queremos realmente salvar nossos dados no banco

19
00:00:49,260 --> 00:00:51,700
‫de dados, mas as propriedades virtuais fazem

20
00:00:51,700 --> 00:00:55,090
‫muito sentido para campos que podem ser derivados uns dos outros.

21
00:00:55,090 --> 00:00:58,410
‫Por exemplo, uma conversão de milhas para quilômetros, não faz

22
00:00:58,410 --> 00:01:00,720
‫sentido armazenar esses dois campos

23
00:01:00,720 --> 00:01:03,260
‫em um banco de dados se pudermos

24
00:01:03,260 --> 00:01:05,750
‫facilmente converter um para o outro, certo?

25
00:01:05,750 --> 00:01:09,140
‫Ok, agora vamos definir uma propriedade virtual que contém

26
00:01:09,140 --> 00:01:11,680
‫a duração do passeio em semanas.

27
00:01:11,680 --> 00:01:13,800
‫E então esse é um

28
00:01:13,800 --> 00:01:16,460
‫campo basicamente que podemos facilmente converter a partir

29
00:01:16,460 --> 00:01:18,970
‫da duração que já temos em dias, certo?

30
00:01:18,970 --> 00:01:20,523
‫E então é assim que funciona.

31
00:01:22,160 --> 00:01:25,640
‫Definimos essas propriedades virtuais no esquema de

32
00:01:25,640 --> 00:01:30,640
‫passeio e, portanto, dizemos tourSchema. virtual e, em seguida, o nome

33
00:01:33,430 --> 00:01:34,763
‫da propriedade virtual.

34
00:01:36,530 --> 00:01:39,300
‫Então, vamos chamá-lo de semanas de

35
00:01:39,300 --> 00:01:42,950
‫duração e, em seguida, precisamos definir o método get.

36
00:01:42,950 --> 00:01:45,600
‫E isso porque essa propriedade virtual aqui

37
00:01:45,600 --> 00:01:47,580
‫será basicamente criada toda vez

38
00:01:47,580 --> 00:01:50,560
‫que retirarmos alguns dados do banco de dados.

39
00:01:50,560 --> 00:01:54,273
‫E então esta função get aqui é chamada de getter.

40
00:01:54,273 --> 00:01:57,090
‫Agora, aqui, passamos uma função e, na

41
00:01:57,090 --> 00:01:58,400
‫verdade, essa função

42
00:01:58,400 --> 00:02:02,460
‫de retorno de chamada será uma função real, não uma função de

43
00:02:02,460 --> 00:02:05,672
‫seta, e vou explicar o porquê em um segundo.

44
00:02:05,672 --> 00:02:08,500
‫Agora, como definimos basicamente

45
00:02:08,500 --> 00:02:10,810
‫a propriedade virtual?

46
00:02:10,810 --> 00:02:13,420
‫Bem, é muito simples, tudo o que temos

47
00:02:13,420 --> 00:02:18,280
‫a dizer é que queremos devolver este,. duração, neste caso, dividida

48
00:02:18,280 --> 00:02:19,833
‫por sete.

49
00:02:21,020 --> 00:02:24,350
‫É assim que calculamos a duração em semanas, a duração

50
00:02:24,350 --> 00:02:26,730
‫em dias dividida por sete, porque há

51
00:02:26,730 --> 00:02:29,110
‫sete dias na semana, e essa é

52
00:02:29,110 --> 00:02:31,030
‫a duração em semanas.

53
00:02:31,030 --> 00:02:33,510
‫Por exemplo, se um passeio tem sete dias,

54
00:02:33,510 --> 00:02:35,730
‫é claro que será uma semana.

55
00:02:35,730 --> 00:02:38,360
‫Agora, usei essa função regular aqui porque,

56
00:02:38,360 --> 00:02:41,250
‫lembre-se, uma função de seta não obtém sua

57
00:02:41,250 --> 00:02:43,060
‫própria palavra-chave de disco.

58
00:02:43,060 --> 00:02:45,800
‫Aqui, realmente precisamos da palavra-chave disk

59
00:02:45,800 --> 00:02:48,470
‫porque a palavra-chave disk, neste

60
00:02:48,470 --> 00:02:51,588
‫caso, vai apontar para o documento atual.

61
00:02:51,588 --> 00:02:54,640
‫E então, normalmente, quando queremos

62
00:02:54,640 --> 00:02:58,714
‫usar isso, devemos sempre usar uma função regular.

63
00:02:58,714 --> 00:03:01,140
‫Em qualquer lugar do Mongoose, sempre

64
00:03:01,140 --> 00:03:04,340
‫estarei usando essas funções regulares com as

65
00:03:04,340 --> 00:03:06,061
‫quais estamos acostumados.

66
00:03:06,061 --> 00:03:11,061
‫Então, salve aqui, e é isso.

67
00:03:11,070 --> 00:03:13,180
‫É assim que definimos a duração

68
00:03:13,180 --> 00:03:15,660
‫das semanas, que não vai ser persistida no

69
00:03:15,660 --> 00:03:19,150
‫banco de dados, mas só estará lá assim que tivermos os dados.

70
00:03:19,150 --> 00:03:21,820
‫Agora, na verdade, ainda não vai estar

71
00:03:21,820 --> 00:03:24,610
‫lá, porque há uma peça faltando aqui,

72
00:03:24,610 --> 00:03:27,243
‫então deixe-me começar mostrando isso.

73
00:03:28,760 --> 00:03:31,240
‫Portanto, se tentarmos obter todos os passeios,

74
00:03:31,240 --> 00:03:34,050
‫você verá que semanas de duração não estão

75
00:03:34,050 --> 00:03:35,768
‫em lugar nenhum aqui.

76
00:03:35,768 --> 00:03:38,660
‫E isso porque precisamos definir explicitamente em

77
00:03:38,660 --> 00:03:41,740
‫nosso esquema que queremos as propriedades virtuais em

78
00:03:41,740 --> 00:03:42,683
‫nossa saída.

79
00:03:43,758 --> 00:03:48,758
‫E então lembre-se de como eu disse isso a este Mangusto. esquema, podemos passar não apenas o

80
00:03:49,320 --> 00:03:51,650
‫objeto com a própria

81
00:03:51,650 --> 00:03:54,050
‫definição do esquema, mas também

82
00:03:54,050 --> 00:03:56,943
‫um objeto para as opções do esquema.

83
00:03:58,070 --> 00:04:00,579
‫E então vamos adicionar isso aqui

84
00:04:00,579 --> 00:04:04,810
‫no final, então este primeiro objeto aqui é a definição do esquema,

85
00:04:04,810 --> 00:04:07,630
‫e agora um objeto para as opções.

86
00:04:07,630 --> 00:04:11,260
‫E o que precisamos especificar aqui são as duas propriedades

87
00:04:12,390 --> 00:04:15,410
‫JSON aqui, e o que dizemos é que,

88
00:04:15,410 --> 00:04:19,453
‫cada vez que os dados são realmente enviados como JSON, queremos

89
00:04:20,480 --> 00:04:22,710
‫que os virtuais sejam verdadeiros.

90
00:04:23,681 --> 00:04:26,657
‫Então, basicamente, os virtuais fazem parte da saída.

91
00:04:27,800 --> 00:04:30,000
‫E agora estou duplicando isso porque

92
00:04:30,000 --> 00:04:31,923
‫também queremos dizer para objetar.

93
00:04:33,370 --> 00:04:36,037
‫Então, basicamente, quando os dados são enviados

94
00:04:36,037 --> 00:04:37,320
‫como um objeto.

95
00:04:37,320 --> 00:04:40,010
‫E se voltarmos aqui, poderemos ver

96
00:04:40,010 --> 00:04:41,993
‫as semanas de duração.

97
00:04:43,120 --> 00:04:46,550
‫Vamos esperar e, de fato, aqui está.

98
00:04:46,550 --> 00:04:51,053
‫Então, são cinco dias e isso é 0. 71 semanas.

99
00:04:52,250 --> 00:04:55,800
‫Aqui temos sete dias, e isso é uma semana.

100
00:04:55,800 --> 00:04:59,810
‫Ok, isso realmente funciona, ótimo.

101
00:04:59,810 --> 00:05:01,680
‫Agora, uma coisa que precisamos

102
00:05:01,680 --> 00:05:04,840
‫ter em mente é que não podemos usar essa propriedade

103
00:05:04,840 --> 00:05:07,840
‫virtual aqui em uma consulta, porque tecnicamente eles não

104
00:05:07,840 --> 00:05:09,980
‫fazem parte do banco de dados.

105
00:05:09,980 --> 00:05:11,370
‫Portanto, não

106
00:05:11,370 --> 00:05:16,370
‫podemos dizer, por exemplo, turnê. encontre onde a duração semanas é igual a um.

107
00:05:16,618 --> 00:05:19,660
‫Isso não vai funcionar, novamente porque essa propriedade

108
00:05:19,660 --> 00:05:22,520
‫não faz parte do banco de dados.

109
00:05:22,520 --> 00:05:25,330
‫Claro que também poderíamos ter feito essa

110
00:05:25,330 --> 00:05:28,450
‫conversão toda vez que consultarmos os dados, por exemplo,

111
00:05:28,450 --> 00:05:30,890
‫como em um controlador, mas

112
00:05:30,890 --> 00:05:34,240
‫essa não seria a melhor prática simplesmente porque queremos

113
00:05:34,240 --> 00:05:36,960
‫tentar manter a lógica de negócios e

114
00:05:36,960 --> 00:05:39,830
‫a lógica do aplicativo separadas quanto possível, lembra?

115
00:05:39,830 --> 00:05:42,980
‫Então essa foi toda aquela conversa sobre modelos gordos

116
00:05:42,980 --> 00:05:46,950
‫e controladores finos de que falamos antes, que diz que devemos

117
00:05:46,950 --> 00:05:48,850
‫ter modelos com o

118
00:05:48,850 --> 00:05:52,390
‫máximo de lógica de negócios que pudermos descarregar para eles

119
00:05:52,390 --> 00:05:54,460
‫e controladores finos com o

120
00:05:54,460 --> 00:05:56,598
‫mínimo de lógica de negócios possível.

121
00:05:56,598 --> 00:05:59,840
‫E propriedades virtuais como essa são, na verdade, um

122
00:05:59,840 --> 00:06:01,970
‫bom exemplo de como podemos conseguir

123
00:06:01,970 --> 00:06:03,483
‫esse tipo de arquitetura.

124
00:06:04,410 --> 00:06:06,460
‫Portanto, saber a duração em semanas

125
00:06:06,460 --> 00:06:09,070
‫é uma lógica de negócios porque tem a

126
00:06:09,070 --> 00:06:11,900
‫ver com o próprio negócio, não com coisas como

127
00:06:11,900 --> 00:06:14,550
‫solicitações ou respostas, então fazemos o cálculo certo

128
00:06:14,550 --> 00:06:16,460
‫no modelo a que pertence e

129
00:06:16,460 --> 00:06:17,863
‫não no controlador.

