-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelpers.js
75 lines (62 loc) · 2.06 KB
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const Event = require('./models/event')
const User = require('./models/user')
const {dateTransformer} = require("./date")
const user = async (userId) => {
try{
const user = await User.findById(userId)
return {
...user._doc,
_id:user.id,
createdEvents: events.bind(this,user._doc.createdEvents) // this action will be called just when i need this information
};
}
catch{
throw new Error('user is could not find')
}
}
//I need to refactor the data when i take data from the mongoDB
const eventTransformer = (event) =>{
return {
...event._doc,
_id: event.id,
date: dateTransformer(event.date),
creator: user.bind(this,event.creator)
}
}
// this async fetchSingleEvent function will work exactly same principle with events function but it will fetch just one event
const fetchSingleEvent = async (eventId) =>{
try{
const event = await Event.findById(eventId);
return eventTransformer(event);
}catch(err){
throw err
}
}
const bookingTransformer = (booking) =>{
return {
...booking._doc,
_id: booking.id ,
user: user.bind(this, booking._doc.user),
event: fetchSingleEvent.bind(this, booking._doc.event),
createdAt: dateTransformer(booking._doc.createdAt),
updatedAt: dateTransformer(booking._doc.updatedAt)
}
}
//in this way i do not need to use mongoose populate method and i can send request as much as i want this give more flexibilty
// take array of event ids and create from them array of event objects
const events = async (eventIds) => {
try {
const events = await Event.find({_id: { $in: eventIds}})
return events.map( event =>{
return eventTransformer(event)
})
}
catch(err) {
throw new Error ('events are could not find')
}
}
exports.user = user;
exports.events = events;
exports.fetchSingleEvent = fetchSingleEvent;
exports.bookingTransformer = bookingTransformer;
exports.eventTransformer = eventTransformer;