1
+ const bcrypt = require ( 'bcryptjs' ) ;
2
+
3
+ const Event = require ( '../../models/event' ) ;
4
+ const User = require ( '../../models/user' ) ;
5
+
6
+ const events = async eventIds => {
7
+ try {
8
+ const events = await Event . find ( { _id : { $in : eventIds } } ) ;
9
+ events . map ( event => {
10
+ return {
11
+ ...event . _doc ,
12
+ _id : event . id ,
13
+ date : new Date ( event . _doc . date ) . toISOString ( ) ,
14
+ creator : user . bind ( this , event . creator )
15
+ } ;
16
+ } ) ;
17
+ return events . map ( ) ;
18
+ } catch ( err ) {
19
+ throw err ;
20
+ }
21
+ } ;
22
+
23
+ const user = async userId => {
24
+ try {
25
+ const user = await User . findById ( userId ) ;
26
+ return {
27
+ ...user . _doc ,
28
+ _id : user . id ,
29
+ createdEvents : events . bind ( this , user . _doc . createdEvents )
30
+ } ;
31
+ } catch ( err ) {
32
+ throw err ;
33
+ }
34
+ } ;
35
+
36
+
37
+ // const user = userId => {
38
+ // return User.findById(userId)
39
+ // .then(user => {
40
+ // return {
41
+ // ...user._doc,
42
+ // _id: user.id,
43
+ // createdEvents: events.bind(this, user._doc.createdEvents)
44
+ // }
45
+ // })
46
+ // .catch(err => {
47
+ // throw err;
48
+ // })
49
+ // };
50
+
51
+
52
+ module . exports = {
53
+ events : async ( ) => {
54
+ try {
55
+ const events = await Event . find ( ) ;
56
+ return events . map ( event => {
57
+ //return { ...event._doc, _id: event._doc._id.toString() };
58
+ return {
59
+ ...event . _doc ,
60
+ _id : event . id ,
61
+ date : new Date ( event . _doc . date ) . toISOString ( ) ,
62
+ creator : user . bind ( this , event . _doc . creator )
63
+ } ; // shortcut virtual getter mongoose
64
+ } ) ;
65
+ } catch ( err ) {
66
+ throw err ;
67
+ }
68
+ } ,
69
+ createEvent : async args => {
70
+ const event = new Event ( {
71
+ title : args . eventInput . title ,
72
+ description : args . eventInput . description ,
73
+ price : + args . eventInput . price ,
74
+ date : new Date ( args . eventInput . date ) ,
75
+ creator : '5c210f381e5293861c6c2c3f'
76
+ } ) ;
77
+ let createdEvent ;
78
+
79
+ try {
80
+ const result = await event
81
+ . save ( ) ;
82
+ createdEvent = {
83
+ ...result . _doc ,
84
+ _id : result . _doc . _id . toString ( ) ,
85
+ date : new Date ( event . _doc . date ) . toISOString ( ) ,
86
+ creator : user . bind ( this , result . _doc . creator )
87
+ } ;
88
+ const creator = await User . findById ( '5c210f381e5293861c6c2c3f' ) ;
89
+
90
+
91
+ if ( ! creator ) {
92
+ throw new Error ( 'User not found' )
93
+ }
94
+ creator . createdEvents . push ( event ) ;
95
+ await creator . save ( ) ;
96
+
97
+ return createdEvent ;
98
+ } catch ( err ) {
99
+ console . log ( err ) ;
100
+ throw err ;
101
+ }
102
+ } ,
103
+ createUser : async args => {
104
+ try {
105
+ const existingUser = await User . findOne ( { email : args . userInput . email } ) ;
106
+
107
+ if ( existingUser ) {
108
+ throw new Error ( 'User exists already' ) ;
109
+ }
110
+ const hashedPassword = await bcrypt . hash ( args . userInput . password , 12 ) ;
111
+
112
+
113
+ const user = new User ( {
114
+ email : args . userInput . email ,
115
+ password : hashedPassword
116
+ } ) ;
117
+ const result = await user . save ( ) ;
118
+
119
+
120
+ return { ...result . _doc , password : null , _id : result . id }
121
+ } catch ( err ) {
122
+ throw err ;
123
+ }
124
+
125
+ }
126
+ } ;
127
+
128
+ // module.exports = {
129
+ // events: () => {
130
+ // return Event.find()
131
+ // .then(events => {
132
+ // return events.map(event => {
133
+ // //return { ...event._doc, _id: event._doc._id.toString() };
134
+ // return { ...event._doc,
135
+ // _id: event.id,
136
+ // date: new Date(event._doc.date).toISOString(),
137
+ // creator: user.bind(this, event._doc.creator)
138
+ // }; // shortcut virtual getter mongoose
139
+ // });
140
+ // })
141
+ // .catch(err => {
142
+ // throw err;
143
+ // })
144
+ // },
145
+ // createEvent: ( args ) => {
146
+ // const event = new Event({
147
+ // title: args.eventInput.title,
148
+ // description: args.eventInput.description,
149
+ // price: +args.eventInput.price,
150
+ // date: new Date(args.eventInput.date),
151
+ // creator: '5c18473daf935d1004745020'
152
+ // });
153
+ // let createdEvent;
154
+ // return event
155
+ // .save()
156
+ // .then(result => {
157
+ // createdEvent = {
158
+ // ...result._doc,
159
+ // _id: result._doc._id.toString(),
160
+ // date: new Date(event._doc.date).toISOString(),
161
+ // creator: user.bind(this, result._doc.creator )
162
+ // };
163
+ // return User.findById('5c18473daf935d1004745020')
164
+ // })
165
+ // .then(user => {
166
+ // if (!user) {
167
+ // throw new Error('User not found')
168
+ // }
169
+ // user.createdEvents.push(event);
170
+ // return user.save();
171
+ // })
172
+ // .then(result => {
173
+ // return createdEvent;
174
+ // })
175
+ // .catch(err => {
176
+ // console.log(err);
177
+ // throw err;
178
+ // });
179
+ // },
180
+ // createUser: args => {
181
+ // return User.findOne({email: args.userInput.email})
182
+ // .then(user => {
183
+ // if (user) {
184
+ // throw new Error('User exists already')
185
+ // }
186
+ // return bcrypt.hash(args.userInput.password, 12)
187
+ // })
188
+ // .then(hashedPassword => {
189
+ // const user = new User({
190
+ // email: args.userInput.email,
191
+ // password: hashedPassword
192
+ // });
193
+ // return user.save();
194
+ // })
195
+ // .then(result => {
196
+ // return {...result._doc, password: null, _id: result.id}
197
+ // })
198
+ // .catch(err => {
199
+ // throw err;
200
+ // });
201
+ //
202
+ // }
203
+ // }
0 commit comments