Skip to content

Commit 370ffdf

Browse files
committed
add DataLoader
1 parent 85d0d9e commit 370ffdf

File tree

3 files changed

+30
-14
lines changed

3 files changed

+30
-14
lines changed

nodejs/graphql/resolvers/merge.js

+24-14
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
1+
const DataLoader = require('dataloader');
2+
13
const Event = require('../../models/event');
24
const User = require('../../models/user');
35

46
const { 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+
619
const 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+
*/
2433
const transformEvent = event => {
2534
return {
2635
...event._doc,
@@ -29,6 +38,10 @@ const transformEvent = event => {
2938
};
3039
}
3140

41+
/**
42+
*
43+
* @param {*} booking
44+
*/
3245
const transformBooking = booking => {
3346
return {
3447
...booking._doc,
@@ -40,9 +53,6 @@ const transformBooking = booking => {
4053
}
4154

4255
module.exports = {
43-
findUserById,
44-
findEventById,
45-
findEventsByIds,
4656
transformEvent,
4757
transformBooking,
4858
}

nodejs/package-lock.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nodejs/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"dependencies": {
2424
"bcrypt": "^3.0.6",
2525
"cors": "^2.8.5",
26+
"dataloader": "^1.4.0",
2627
"express": "^4.17.1",
2728
"express-graphql": "^0.9.0",
2829
"graphql": "^14.4.2",

0 commit comments

Comments
 (0)