﻿1
00:00:01,210 --> 00:00:02,660
‫Instructeur : Jusqu'à

2
00:00:02,660 --> 00:00:04,860
‫présent dans cette section, nous avons

3
00:00:04,860 --> 00:00:06,940
‫parlé des modèles Mongoose, des opérations

4
00:00:06,940 --> 00:00:09,660
‫CRUD avec Mongoose, nous avons fait beaucoup de

5
00:00:09,660 --> 00:00:12,820
‫requêtes et nous avons appris le pipeline d'agrégation, mais

6
00:00:12,820 --> 00:00:15,110
‫maintenant pour les deux prochaines vidéos, revenons

7
00:00:15,110 --> 00:00:18,860
‫en fait à nos données modéliser et apprendre quelques fonctionnalités super

8
00:00:18,860 --> 00:00:22,170
‫utiles que Mongoose nous offre afin de modéliser nos données.

9
00:00:22,170 --> 00:00:24,090
‫Et le premier dont nous allons

10
00:00:24,090 --> 00:00:25,773
‫parler sont les propriétés virtuelles.

11
00:00:27,410 --> 00:00:29,973
‫Et donc ouvrons notre modèle de tournée ici.

12
00:00:31,050 --> 00:00:35,080
‫D'accord, maintenant les propriétés virtuelles sont essentiellement des champs que nous

13
00:00:35,080 --> 00:00:37,030
‫pouvons définir sur notre schéma

14
00:00:37,030 --> 00:00:39,150
‫mais qui ne seront pas persistants.

15
00:00:39,150 --> 00:00:42,100
‫Ils ne seront donc pas enregistrés dans la base de données

16
00:00:42,100 --> 00:00:44,720
‫afin de nous faire gagner de la place.

17
00:00:44,720 --> 00:00:46,140
‫Et la plupart du

18
00:00:46,140 --> 00:00:49,260
‫temps, bien sûr, nous voulons vraiment enregistrer nos données dans la

19
00:00:49,260 --> 00:00:51,700
‫base de données, mais les propriétés virtuelles ont beaucoup

20
00:00:51,700 --> 00:00:55,090
‫de sens pour les champs qui peuvent être dérivés les uns des autres.

21
00:00:55,090 --> 00:00:58,410
‫Par exemple une conversion de miles en kilomètres, cela n'a pas

22
00:00:58,410 --> 00:01:00,720
‫de sens de stocker ces deux

23
00:01:00,720 --> 00:01:03,260
‫champs dans une base de données si on

24
00:01:03,260 --> 00:01:05,750
‫peut facilement convertir l'un en l'autre, non ?

25
00:01:05,750 --> 00:01:09,140
‫Bon, définissons maintenant une propriété virtuelle qui contient la

26
00:01:09,140 --> 00:01:11,680
‫durée de la visite en semaines.

27
00:01:11,680 --> 00:01:13,800
‫Et c'est donc un champ que

28
00:01:13,800 --> 00:01:16,460
‫nous pouvons très facilement convertir à partir de la durée

29
00:01:16,460 --> 00:01:18,970
‫que nous avons déjà en jours, n'est-ce pas ?

30
00:01:18,970 --> 00:01:20,523
‫Et voici donc comment cela fonctionne.

31
00:01:22,160 --> 00:01:25,640
‫Nous définissons ces propriétés virtuelles sur le schéma de

32
00:01:25,640 --> 00:01:30,640
‫tournée, et ainsi nous disons, tourSchema. virtual puis le nom de la

33
00:01:33,430 --> 00:01:34,763
‫propriété virtuelle.

34
00:01:36,530 --> 00:01:39,300
‫Appelons cela des semaines de durée,

35
00:01:39,300 --> 00:01:42,950
‫puis là, nous devons définir la méthode get.

36
00:01:42,950 --> 00:01:45,600
‫Et c'est juste parce que cette propriété virtuelle ici

37
00:01:45,600 --> 00:01:47,580
‫sera essentiellement créée chaque fois

38
00:01:47,580 --> 00:01:50,560
‫que nous extrairons des données de la base de données.

39
00:01:50,560 --> 00:01:54,273
‫Et donc cette fonction get ici est appelée un getter.

40
00:01:54,273 --> 00:01:57,090
‫Maintenant, ici, nous passons une fonction, et en

41
00:01:57,090 --> 00:01:58,400
‫fait cette fonction

42
00:01:58,400 --> 00:02:02,460
‫de rappel va être une vraie fonction, donc pas une fonction de

43
00:02:02,460 --> 00:02:05,672
‫flèche, et je vais vous expliquer pourquoi dans une seconde.

44
00:02:05,672 --> 00:02:08,500
‫Maintenant, comment définissons-nous fondamentalement la

45
00:02:08,500 --> 00:02:10,810
‫propriété virtuelle ?

46
00:02:10,810 --> 00:02:13,420
‫Bon c'est très simple, tout ce qu'on a à

47
00:02:13,420 --> 00:02:18,280
‫dire c'est qu'on veut rendre ça, . durée dans ce cas, divisée

48
00:02:18,280 --> 00:02:19,833
‫par sept.

49
00:02:21,020 --> 00:02:24,350
‫Donc c'est comme ça qu'on calcule la durée en semaines, donc la

50
00:02:24,350 --> 00:02:26,730
‫durée en jours divisée par sept car il

51
00:02:26,730 --> 00:02:29,110
‫y a sept jours dans la semaine, et

52
00:02:29,110 --> 00:02:31,030
‫c'est donc la durée en semaines.

53
00:02:31,030 --> 00:02:33,510
‫Par exemple, si une tournée a sept jours,

54
00:02:33,510 --> 00:02:35,730
‫elle durera bien sûr une semaine.

55
00:02:35,730 --> 00:02:38,360
‫Maintenant, j'ai utilisé cette fonction régulière ici, car

56
00:02:38,360 --> 00:02:41,250
‫rappelez-vous qu'une fonction de flèche n'obtient pas son

57
00:02:41,250 --> 00:02:43,060
‫propre mot-clé de disque.

58
00:02:43,060 --> 00:02:45,800
‫Ici, nous avons en fait besoin du

59
00:02:45,800 --> 00:02:48,470
‫mot-clé disk car le mot-clé disk

60
00:02:48,470 --> 00:02:51,588
‫dans ce cas va pointer vers le document actuel.

61
00:02:51,588 --> 00:02:54,640
‫Et donc généralement, lorsque nous

62
00:02:54,640 --> 00:02:58,714
‫voulons l'utiliser, nous devons toujours utiliser une fonction normale.

63
00:02:58,714 --> 00:03:01,140
‫Donc vraiment partout dans Mongoose, je

64
00:03:01,140 --> 00:03:04,340
‫vais toujours utiliser ces fonctions régulières auxquelles

65
00:03:04,340 --> 00:03:06,061
‫nous sommes habitués.

66
00:03:06,061 --> 00:03:11,061
‫Alors faites une sauvegarde ici, et c'est tout.

67
00:03:11,070 --> 00:03:13,180
‫C'est ainsi que nous définissons les semaines

68
00:03:13,180 --> 00:03:15,660
‫de durée, qui ne seront pas persistantes dans la base

69
00:03:15,660 --> 00:03:19,150
‫de données, mais elles ne seront là que dès que nous aurons les données.

70
00:03:19,150 --> 00:03:21,820
‫Maintenant, pour le moment, il ne sera pas

71
00:03:21,820 --> 00:03:24,610
‫encore là, car il manque une pièce ici,

72
00:03:24,610 --> 00:03:27,243
‫alors laissez-moi commencer par vous le montrer.

73
00:03:28,760 --> 00:03:31,240
‫Donc, si nous essayons d'obtenir toutes

74
00:03:31,240 --> 00:03:34,050
‫les visites, vous verrez que les semaines de

75
00:03:34,050 --> 00:03:35,768
‫durée sont introuvables ici.

76
00:03:35,768 --> 00:03:38,660
‫Et c'est parce que nous devons définir explicitement dans

77
00:03:38,660 --> 00:03:41,740
‫notre schéma que nous voulons les propriétés virtuelles dans

78
00:03:41,740 --> 00:03:42,683
‫notre sortie.

79
00:03:43,758 --> 00:03:48,758
‫Et rappelez-vous comment j'ai dit cela dans cette mangouste. schéma, nous pouvons transmettre non seulement

80
00:03:49,320 --> 00:03:51,650
‫l'objet avec la définition

81
00:03:51,650 --> 00:03:54,050
‫de schéma elle-même, mais également

82
00:03:54,050 --> 00:03:56,943
‫un objet pour les options de schéma.

83
00:03:58,070 --> 00:04:00,579
‫Et donc ajoutons cela ici à

84
00:04:00,579 --> 00:04:04,810
‫la fin, donc ce premier objet ici est la définition du schéma,

85
00:04:04,810 --> 00:04:07,630
‫et maintenant un deuxième objet pour les options.

86
00:04:07,630 --> 00:04:11,260
‫Et ce que nous devons spécifier ici, ce sont les deux propriétés

87
00:04:12,390 --> 00:04:15,410
‫JSON ici, et ce que nous disons alors, c'est que

88
00:04:15,410 --> 00:04:19,453
‫chaque fois que les données sont réellement sorties en tant que JSON, nous

89
00:04:20,480 --> 00:04:22,710
‫voulons que les virtuals soient vrais.

90
00:04:23,681 --> 00:04:26,657
‫Donc, fondamentalement, les virtuels doivent faire partie de la sortie.

91
00:04:27,800 --> 00:04:30,000
‫Et maintenant, je duplique cela parce que

92
00:04:30,000 --> 00:04:31,923
‫nous voulons aussi dire d'objecter.

93
00:04:33,370 --> 00:04:36,037
‫Donc, fondamentalement, lorsque les données sont sorties

94
00:04:36,037 --> 00:04:37,320
‫en tant qu'objet.

95
00:04:37,320 --> 00:04:40,010
‫Et donc si nous revenons maintenant ici, nous devrions alors être

96
00:04:40,010 --> 00:04:41,993
‫en mesure de voir la durée des semaines.

97
00:04:43,120 --> 00:04:46,550
‫Attendons-le, et en effet, le voici.

98
00:04:46,550 --> 00:04:51,053
‫C'est donc cinq jours, et c'est donc 0. 71 semaines.

99
00:04:52,250 --> 00:04:55,800
‫Ici, nous avons sept jours, et donc une semaine.

100
00:04:55,800 --> 00:04:59,810
‫D'accord, donc ça marche vraiment, super.

101
00:04:59,810 --> 00:05:01,680
‫Maintenant, une chose que nous devons

102
00:05:01,680 --> 00:05:04,840
‫garder à l'esprit est que nous ne pouvons pas utiliser cette

103
00:05:04,840 --> 00:05:07,840
‫propriété virtuelle ici dans une requête, car techniquement, elles ne font

104
00:05:07,840 --> 00:05:09,980
‫pas partie de la base de données.

105
00:05:09,980 --> 00:05:11,370
‫On ne peut

106
00:05:11,370 --> 00:05:16,370
‫donc pas dire, par exemple, tournée. trouver où la durée semaines est égale à un.

107
00:05:16,618 --> 00:05:19,660
‫Cela ne fonctionnera pas, encore une fois parce que cette propriété

108
00:05:19,660 --> 00:05:22,520
‫ne fait pas réellement partie de la base de données.

109
00:05:22,520 --> 00:05:25,330
‫Bien sûr, nous aurions également pu effectuer cette conversion

110
00:05:25,330 --> 00:05:28,450
‫à chaque fois que nous avons interrogé les données, par

111
00:05:28,450 --> 00:05:30,890
‫exemple, comme dans un contrôleur, mais ce

112
00:05:30,890 --> 00:05:34,240
‫ne serait pas la meilleure pratique simplement parce que nous voulons

113
00:05:34,240 --> 00:05:36,960
‫essayer de garder la logique métier et la

114
00:05:36,960 --> 00:05:39,830
‫logique d'application autant séparées que possible, tu te souviens?

115
00:05:39,830 --> 00:05:42,980
‫C'était donc toute cette discussion sur les gros modèles

116
00:05:42,980 --> 00:05:46,950
‫et les contrôleurs légers dont nous avons parlé précédemment et qui dit

117
00:05:46,950 --> 00:05:48,850
‫que nous devrions avoir des

118
00:05:48,850 --> 00:05:52,390
‫modèles avec autant de logique métier que nous pouvons leur

119
00:05:52,390 --> 00:05:54,460
‫décharger et des contrôleurs légers avec

120
00:05:54,460 --> 00:05:56,598
‫le moins de logique métier possible.

121
00:05:56,598 --> 00:05:59,840
‫Et donc des propriétés virtuelles comme celle-ci sont en fait un

122
00:05:59,840 --> 00:06:01,970
‫bon exemple de la façon dont nous pouvons

123
00:06:01,970 --> 00:06:03,483
‫réaliser ce type d'architecture.

124
00:06:04,410 --> 00:06:06,460
‫Donc, connaître la durée en semaines est

125
00:06:06,460 --> 00:06:09,070
‫une logique métier car cela a à voir avec

126
00:06:09,070 --> 00:06:11,900
‫l'entreprise elle-même, pas avec des choses comme des demandes ou

127
00:06:11,900 --> 00:06:14,550
‫des réponses, et donc nous faisons le calcul directement

128
00:06:14,550 --> 00:06:16,460
‫dans le modèle auquel il appartient et

129
00:06:16,460 --> 00:06:17,863
‫non dans le contrôleur.

