1
+ const DataLoader = require ( 'dataloader' ) ;
2
+
1
3
const Event = require ( '../../models/event' ) ;
2
4
const User = require ( '../../models/user' ) ;
3
5
4
6
const { dateToString } = require ( '../../util/date' ) ;
5
7
8
+ const eventsLoader = new DataLoader ( async ids => {
9
+ console . log ( 'events' , { ids } ) ;
10
+ const events = await Event . find ( { _id : { $in : ids } } ) ;
11
+ return events . map ( transformEvent ) ;
12
+ } ) ;
13
+
14
+ const userLoader = new DataLoader ( ids => {
15
+ console . log ( 'user' , { ids } ) ;
16
+ return User . find ( { _id : { $in : ids } } ) . exec ( ) ;
17
+ } ) ;
18
+
6
19
const findUserById = async id => {
7
- const user = await User . findById ( id ) ;
20
+ const user = await userLoader . load ( id . toString ( ) ) ;
8
21
return {
9
22
...user . _doc ,
10
- createdEvents : ( ) => findEventsByIds ( user . createdEvents ) ,
23
+ createdEvents : ( ) => eventsLoader . loadMany ( user . createdEvents . map ( id => id . toString ( ) ) ) ,
11
24
} ;
12
25
} ;
13
26
14
- const findEventById = async id => {
15
- const event = await Event . findById ( id ) ;
16
- return transformEvent ( event ) ;
17
- }
18
-
19
- const findEventsByIds = async ids => {
20
- const events = await Event . find ( { _id : { $in : ids } } ) ;
21
- return events . map ( transformEvent ) ;
22
- }
27
+ const findEventById = id => eventsLoader . load ( id . toString ( ) ) ;
23
28
29
+ /**
30
+ *
31
+ * @param {* } event
32
+ */
24
33
const transformEvent = event => {
25
34
return {
26
35
...event . _doc ,
@@ -29,6 +38,10 @@ const transformEvent = event => {
29
38
} ;
30
39
}
31
40
41
+ /**
42
+ *
43
+ * @param {* } booking
44
+ */
32
45
const transformBooking = booking => {
33
46
return {
34
47
...booking . _doc ,
@@ -40,9 +53,6 @@ const transformBooking = booking => {
40
53
}
41
54
42
55
module . exports = {
43
- findUserById,
44
- findEventById,
45
- findEventsByIds,
46
56
transformEvent,
47
57
transformBooking,
48
58
}
0 commit comments