|
| 1 | +const DataLoader = require('dataloader'); |
| 2 | + |
1 | 3 | const Event = require('../../models/event'); |
2 | 4 | 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 | +}); |
4 | 10 |
|
5 | | -const events = async eventIds => { |
| 11 | +const events = async (eventIds) => { |
6 | 12 | 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) => { |
9 | 15 | return transformEvent(event); |
10 | 16 | }); |
11 | 17 | } catch (err) { |
12 | 18 | throw err; |
13 | 19 | } |
14 | 20 | }; |
15 | 21 |
|
16 | | -const singleEvent = async eventId => { |
| 22 | +const singleEvent = async (eventId) => { |
17 | 23 | try { |
18 | | - const event = await Event.findById(eventId); |
19 | | - return transformEvent(event); |
| 24 | + const event = await eventLoader.load(eventId); |
| 25 | + return event; |
20 | 26 | } catch (err) { |
21 | 27 | throw err; |
22 | 28 | } |
23 | 29 | }; |
24 | 30 |
|
25 | | -const user = async userId => { |
| 31 | +const user = async (userId) => { |
26 | 32 | try { |
27 | 33 | const user = await User.findById(userId); |
28 | 34 | return { |
29 | 35 | ...user._doc, |
30 | 36 | _id: user.id, |
31 | | - createdEvents: events.bind(this, user._doc.createdEvents) |
| 37 | + createdEvents: eventLoader.loadMany.bind(this, user._doc.createdEvents), |
32 | 38 | }; |
33 | 39 | } catch (err) { |
34 | 40 | throw err; |
35 | 41 | } |
36 | 42 | }; |
37 | 43 |
|
38 | | -const transformEvent = event => { |
| 44 | +const transformEvent = (event) => { |
39 | 45 | return { |
40 | 46 | ...event._doc, |
41 | 47 | _id: event.id, |
42 | 48 | date: dateToString(event._doc.date), |
43 | | - creator: user.bind(this, event.creator) |
| 49 | + creator: user.bind(this, event.creator), |
44 | 50 | }; |
45 | 51 | }; |
46 | 52 |
|
47 | | -const transformBooking = booking => { |
| 53 | +const transformBooking = (booking) => { |
48 | 54 | return { |
49 | 55 | ...booking._doc, |
50 | 56 | _id: booking.id, |
51 | 57 | user: user.bind(this, booking._doc.user), |
52 | 58 | event: singleEvent.bind(this, booking._doc.event), |
53 | 59 | createdAt: dateToString(booking._doc.createdAt), |
54 | | - createdAt: dateToString(booking._doc.updatedAt) |
| 60 | + createdAt: dateToString(booking._doc.updatedAt), |
55 | 61 | }; |
56 | 62 | }; |
57 | 63 |
|
|
0 commit comments