1+ const DataLoader = require ( 'dataloader' ) ;
2+
13const Event = require ( '../../models/event' ) ;
24const User = require ( '../../models/user' ) ;
35
46const { dateToString } = require ( '../../util/date' ) ;
57
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+
619const findUserById = async id => {
7- const user = await User . findById ( id ) ;
20+ const user = await userLoader . load ( id . toString ( ) ) ;
821 return {
922 ...user . _doc ,
10- createdEvents : ( ) => findEventsByIds ( user . createdEvents ) ,
23+ createdEvents : ( ) => eventsLoader . loadMany ( user . createdEvents . map ( id => id . toString ( ) ) ) ,
1124 } ;
1225} ;
1326
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 ( ) ) ;
2328
29+ /**
30+ *
31+ * @param {* } event
32+ */
2433const transformEvent = event => {
2534 return {
2635 ...event . _doc ,
@@ -29,6 +38,10 @@ const transformEvent = event => {
2938 } ;
3039}
3140
41+ /**
42+ *
43+ * @param {* } booking
44+ */
3245const transformBooking = booking => {
3346 return {
3447 ...booking . _doc ,
@@ -40,9 +53,6 @@ const transformBooking = booking => {
4053}
4154
4255module . exports = {
43- findUserById,
44- findEventById,
45- findEventsByIds,
4656 transformEvent,
4757 transformBooking,
4858}
0 commit comments