@@ -11,6 +11,8 @@ import {
11
11
HackerDbObject ,
12
12
SponsorStatus ,
13
13
SponsorDbObject ,
14
+ TierDbObject ,
15
+ CompanyDbObject ,
14
16
} from '../generated/graphql' ;
15
17
import Context from '../context' ;
16
18
import {
@@ -27,6 +29,7 @@ import { checkInUserToEvent, removeUserFromEvent, registerNFCUIDWithUser, getUse
27
29
import { addOrUpdateEvent , assignEventToCompany , removeAbsentEvents } from '../events' ;
28
30
import { getSignedUploadUrl , getSignedReadUrl } from '../storage/gcp' ;
29
31
import { sendStatusEmail } from '../mail/aws' ;
32
+ import logger from '../logger' ;
30
33
31
34
// added here b/c webpack JSON compilation with 'use-strict' is broken (10/31/19)
32
35
const DEADLINE_TS = 1572497940000 ;
@@ -191,36 +194,33 @@ export const resolvers: CustomResolvers<Context> = {
191
194
root ,
192
195
{ input : { email, name, companyId } } ,
193
196
{ models, user } : Context
194
- ) => {
195
- if ( ! user || user . userType !== UserType . Organizer )
196
- throw new AuthenticationError ( `user '${ JSON . stringify ( user ) } ' must be organizer` ) ;
197
- const sponsor = await models . Sponsors . findOne ( { email } ) ;
197
+ ) : Promise < SponsorDbObject > => {
198
+ checkIsAuthorized ( UserType . Organizer , user ) ;
198
199
const company = await models . Companies . findOne ( { _id : new ObjectID ( companyId ) } ) ;
199
200
if ( ! company ) throw new UserInputError ( `Company with '${ companyId } ' doesn't exist.` ) ;
200
- if ( ! sponsor ) {
201
- await models . Sponsors . insertOne ( {
202
- _id : new ObjectID ( ) ,
203
- company,
204
- createdAt : new Date ( ) ,
205
- email,
206
- firstName : name ,
207
- lastName : '' ,
208
- logins : [ ] ,
209
- phoneNumber : '' ,
210
- dietaryRestrictions : '' ,
211
- emailUnsubscribed : false ,
212
- eventsAttended : [ ] ,
213
- preferredName : '' ,
214
- secondaryIds : [ ] ,
215
- status : SponsorStatus . Added ,
216
- userType : UserType . Sponsor ,
217
- } ) ;
218
- } else {
219
- throw new UserInputError ( `sponsor with '${ email } ' is already added.` ) ;
220
- }
221
- const sponsorCreated = await models . Sponsors . findOne ( { email } ) ;
222
- if ( ! sponsorCreated ) throw new AuthenticationError ( `sponsor not found: ${ email } ` ) ;
223
- return sponsorCreated ;
201
+ const sponsor = await models . Sponsors . findOne ( { email } ) ;
202
+ if ( sponsor ) throw new UserInputError ( `sponsor with '${ email } ' is already added.` ) ;
203
+
204
+ const newSponsor : SponsorDbObject = {
205
+ _id : new ObjectID ( ) ,
206
+ company,
207
+ createdAt : new Date ( ) ,
208
+ email,
209
+ firstName : name ,
210
+ lastName : '' ,
211
+ logins : [ ] ,
212
+ phoneNumber : '' ,
213
+ dietaryRestrictions : '' ,
214
+ emailUnsubscribed : false ,
215
+ eventsAttended : [ ] ,
216
+ preferredName : '' ,
217
+ secondaryIds : [ ] ,
218
+ status : SponsorStatus . Added ,
219
+ userType : UserType . Sponsor ,
220
+ } ;
221
+ logger . info ( `creating new sponsor ${ JSON . stringify ( newSponsor ) } ` ) ;
222
+ await models . Sponsors . insertOne ( newSponsor ) ;
223
+ return newSponsor ;
224
224
} ,
225
225
confirmMySpot : async ( root , _ , { models, user } ) => {
226
226
const { _id, status } = checkIsAuthorized ( UserType . Hacker , user ) as HackerDbObject ;
@@ -256,33 +256,46 @@ export const resolvers: CustomResolvers<Context> = {
256
256
// no email sent if declined
257
257
return value ;
258
258
} ,
259
- createTier : async ( root , { input : { name, permissions } } , { models, user } : Context ) => {
260
- if ( ! user || user . userType !== UserType . Organizer )
261
- throw new AuthenticationError ( `user '${ JSON . stringify ( user ) } ' must be organizer` ) ;
262
- await models . Tiers . insertOne ( {
259
+ createTier : async (
260
+ root ,
261
+ { input : { name, permissions } } ,
262
+ { models, user } : Context
263
+ ) : Promise < TierDbObject > => {
264
+ checkIsAuthorized ( UserType . Organizer , user ) ;
265
+ const tier = await models . Tiers . findOne ( { name } ) ;
266
+ // currently does not support updating
267
+ if ( tier ) throw new UserInputError ( `Tier ${ name } already exists, no action performed.` ) ;
268
+
269
+ const newTier : TierDbObject = {
263
270
_id : new ObjectID ( ) ,
264
271
name,
265
272
permissions : permissions || [ ] ,
266
- } ) ;
267
- const tierCreated = await models . Tiers . findOne ( { name } ) ;
268
- if ( ! tierCreated ) throw new AuthenticationError ( `tier not found: ${ name } ` ) ;
269
- return tierCreated ;
273
+ } ;
274
+ logger . info ( `creating tier ${ JSON . stringify ( newTier ) } ` ) ;
275
+ await models . Tiers . insertOne ( newTier ) ;
276
+ return newTier ;
270
277
} ,
271
- createCompany : async ( root , { input : { name, tierId } } , { models, user } : Context ) => {
272
- if ( ! user || user . userType !== UserType . Organizer )
273
- throw new AuthenticationError ( `user '${ JSON . stringify ( user ) } ' must be organizer` ) ;
274
-
278
+ createCompany : async (
279
+ root ,
280
+ { input : { name, tierId } } ,
281
+ { models, user } : Context
282
+ ) : Promise < CompanyDbObject > => {
283
+ checkIsAuthorized ( UserType . Organizer , user ) ;
275
284
const tier = await models . Tiers . findOne ( { _id : new ObjectID ( tierId ) } ) ;
276
285
if ( ! tier ) throw new UserInputError ( `Tier with id ${ tierId } ' doesn't exist.` ) ;
277
- await models . Companies . insertOne ( {
286
+ // currently does not support updating
287
+ const comp = await models . Companies . findOne ( { name } ) ;
288
+ if ( comp ) throw new UserInputError ( `Company ${ name } already exists, no action performed.` ) ;
289
+
290
+ const newCompany : CompanyDbObject = {
278
291
_id : new ObjectID ( ) ,
279
292
name,
280
293
tier,
281
294
eventsOwned : [ ] ,
282
- } ) ;
283
- const companyCreated = await models . Companies . findOne ( { name } ) ;
284
- if ( ! companyCreated ) throw new AuthenticationError ( `company not found: ${ name } ` ) ;
285
- return companyCreated ;
295
+ } ;
296
+ logger . info ( `creating company ${ JSON . stringify ( newCompany ) } ` ) ;
297
+ await models . Companies . insertOne ( newCompany ) ;
298
+ return newCompany ;
286
299
} ,
287
300
checkInUserToEventByNfc : async ( root , { input } , { models, user } ) => {
288
301
checkIsAuthorizedArray ( [ UserType . Organizer , UserType . Volunteer , UserType . Sponsor ] , user ) ;
@@ -419,7 +432,6 @@ export const resolvers: CustomResolvers<Context> = {
419
432
} ) )
420
433
) ;
421
434
422
- // TODO: Update this to set the hacker's profile fields (name, school, gender, etc.) with application data.
423
435
if ( ! result . ok ) {
424
436
throw new UserInputError (
425
437
`error inputting user application input for user "${ id } " ${ JSON . stringify ( result ) } `
0 commit comments