Skip to content

Commit 5f6afb5

Browse files
event data loader
1 parent e0bc0d3 commit 5f6afb5

File tree

3 files changed

+25
-13
lines changed

3 files changed

+25
-13
lines changed

graphql/resolvers/merge.js

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,63 @@
1+
const DataLoader = require('dataloader');
2+
13
const Event = require('../../models/event');
24
const User = require('../../models/user');
3-
const { dateToString } = require('../../helpers/date');
5+
const {dateToString} = require('../../helpers/date');
6+
7+
const eventLoader = new DataLoader((eventIds) => {
8+
return events(eventIds);
9+
});
410

5-
const events = async eventIds => {
11+
const events = async (eventIds) => {
612
try {
7-
const events = await Event.find({ _id: { $in: eventIds } });
8-
return events.map(event => {
13+
const events = await Event.find({_id: {$in: eventIds}});
14+
return events.map((event) => {
915
return transformEvent(event);
1016
});
1117
} catch (err) {
1218
throw err;
1319
}
1420
};
1521

16-
const singleEvent = async eventId => {
22+
const singleEvent = async (eventId) => {
1723
try {
18-
const event = await Event.findById(eventId);
19-
return transformEvent(event);
24+
const event = await eventLoader.load(eventId);
25+
return event;
2026
} catch (err) {
2127
throw err;
2228
}
2329
};
2430

25-
const user = async userId => {
31+
const user = async (userId) => {
2632
try {
2733
const user = await User.findById(userId);
2834
return {
2935
...user._doc,
3036
_id: user.id,
31-
createdEvents: events.bind(this, user._doc.createdEvents)
37+
createdEvents: eventLoader.loadMany.bind(this, user._doc.createdEvents),
3238
};
3339
} catch (err) {
3440
throw err;
3541
}
3642
};
3743

38-
const transformEvent = event => {
44+
const transformEvent = (event) => {
3945
return {
4046
...event._doc,
4147
_id: event.id,
4248
date: dateToString(event._doc.date),
43-
creator: user.bind(this, event.creator)
49+
creator: user.bind(this, event.creator),
4450
};
4551
};
4652

47-
const transformBooking = booking => {
53+
const transformBooking = (booking) => {
4854
return {
4955
...booking._doc,
5056
_id: booking.id,
5157
user: user.bind(this, booking._doc.user),
5258
event: singleEvent.bind(this, booking._doc.event),
5359
createdAt: dateToString(booking._doc.createdAt),
54-
createdAt: dateToString(booking._doc.updatedAt)
60+
createdAt: dateToString(booking._doc.updatedAt),
5561
};
5662
};
5763

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"dependencies": {
1414
"bcryptjs": "^2.4.3",
1515
"body-parser": "^1.19.0",
16+
"dataloader": "^1.4.0",
1617
"express": "^4.17.1",
1718
"express-graphql": "^0.8.0",
1819
"graphql": "^14.3.1",

0 commit comments

Comments
 (0)