@@ -20,6 +20,7 @@ import {
20
20
updateUser ,
21
21
checkIsAuthorized ,
22
22
replaceResumeFieldWithLink ,
23
+ checkIsAuthorizedArray ,
23
24
} from './helpers' ;
24
25
import { checkInUserToEvent , removeUserFromEvent , registerNFCUIDWithUser , getUser } from '../nfc' ;
25
26
import { addOrUpdateEvent } from '../events' ;
@@ -51,7 +52,9 @@ const requiredFields = [
51
52
*/
52
53
export type CustomResolvers < T > = Omit < Resolvers < T > , 'User' > & {
53
54
User : {
54
- __resolveType : ( user : UserDbInterface ) => 'Hacker' | 'Mentor' | 'Organizer' | 'Sponsor' ;
55
+ __resolveType : (
56
+ user : UserDbInterface
57
+ ) => 'Hacker' | 'Mentor' | 'Organizer' | 'Sponsor' | 'Volunteer' ;
55
58
} ;
56
59
} ;
57
60
@@ -76,6 +79,30 @@ const userResolvers: Omit<UserResolvers, '__resolveType' | 'userType'> = {
76
79
} ,
77
80
} ;
78
81
82
+ const hackerResolvers : CustomResolvers < Context > [ 'Hacker' ] = {
83
+ ...userResolvers ,
84
+ adult : async hacker => ( await hacker ) . adult || null ,
85
+ application : async ( hacker , args , { models } : Context ) =>
86
+ replaceResumeFieldWithLink (
87
+ models . ApplicationFields . find ( { userId : ( await hacker ) . _id } ) . toArray ( )
88
+ ) ,
89
+ gender : async hacker => ( await hacker ) . gender || null ,
90
+ github : async hacker => ( await hacker ) . github || null ,
91
+ gradYear : async hacker => ( await hacker ) . gradYear || null ,
92
+ majors : async hacker => ( await hacker ) . majors || [ ] ,
93
+ modifiedAt : async hacker => ( await hacker ) . modifiedAt ,
94
+ race : async hacker => ( await hacker ) . race || '' ,
95
+ school : async hacker => ( await hacker ) . school || null ,
96
+ status : async hacker => toEnum ( ApplicationStatus ) ( ( await hacker ) . status ) ,
97
+ team : async ( hacker , args , { models } ) => {
98
+ const team = await models . UserTeamIndicies . findOne ( { email : ( await hacker ) . email } ) ;
99
+ if ( ! team ) return { _id : new ObjectID ( ) , createdAt : new Date ( 0 ) , memberIds : [ ] , name : '' } ;
100
+ return query ( { name : team . team } , models . Teams ) ;
101
+ } ,
102
+ userType : ( ) => UserType . Hacker ,
103
+ volunteer : async hacker => ( await hacker ) . volunteer || null ,
104
+ } ;
105
+
79
106
export const resolvers : CustomResolvers < Context > = {
80
107
/**
81
108
* These resolvers are for querying fields
@@ -114,28 +141,10 @@ export const resolvers: CustomResolvers<Context> = {
114
141
name : async tier => ( await tier ) . name ,
115
142
permissions : async tier => ( await tier ) . permissions ,
116
143
} ,
117
- Hacker : {
118
- ...userResolvers ,
119
- adult : async hacker => ( await hacker ) . adult || null ,
120
- application : async ( hacker , args , { models } : Context ) =>
121
- replaceResumeFieldWithLink (
122
- models . ApplicationFields . find ( { userId : ( await hacker ) . _id } ) . toArray ( )
123
- ) ,
124
- gender : async hacker => ( await hacker ) . gender || null ,
125
- github : async hacker => ( await hacker ) . github || null ,
126
- gradYear : async hacker => ( await hacker ) . gradYear || null ,
127
- majors : async hacker => ( await hacker ) . majors || [ ] ,
128
- modifiedAt : async hacker => ( await hacker ) . modifiedAt ,
129
- race : async hacker => ( await hacker ) . race || '' ,
130
- school : async hacker => ( await hacker ) . school || null ,
131
- status : async hacker => toEnum ( ApplicationStatus ) ( ( await hacker ) . status ) ,
132
- team : async ( hacker , args , { models } ) => {
133
- const team = await models . UserTeamIndicies . findOne ( { email : ( await hacker ) . email } ) ;
134
- if ( ! team ) return { _id : new ObjectID ( ) , createdAt : new Date ( 0 ) , memberIds : [ ] , name : '' } ;
135
- return query ( { name : team . team } , models . Teams ) ;
136
- } ,
137
- userType : ( ) => UserType . Hacker ,
138
- volunteer : async hacker => ( await hacker ) . volunteer || null ,
144
+ Hacker : hackerResolvers ,
145
+ Volunteer : {
146
+ ...hackerResolvers ,
147
+ userType : ( ) => UserType . Volunteer ,
139
148
} ,
140
149
Login : {
141
150
createdAt : async login => ( await login ) . createdAt . getTime ( ) ,
@@ -164,7 +173,7 @@ export const resolvers: CustomResolvers<Context> = {
164
173
return addOrUpdateEvent ( input , models ) ;
165
174
} ,
166
175
checkInUserToEvent : async ( root , { input } , { models, user } ) => {
167
- checkIsAuthorized ( UserType . Organizer , user ) ;
176
+ checkIsAuthorizedArray ( [ UserType . Organizer , UserType . Volunteer , UserType . Sponsor ] , user ) ;
168
177
const userRet = await checkInUserToEvent ( input . user , input . event , models ) ;
169
178
return userRet ;
170
179
} ,
@@ -265,7 +274,7 @@ export const resolvers: CustomResolvers<Context> = {
265
274
return companyCreated ;
266
275
} ,
267
276
checkInUserToEventByNfc : async ( root , { input } , { models, user } ) => {
268
- checkIsAuthorized ( UserType . Organizer , user ) ;
277
+ checkIsAuthorizedArray ( [ UserType . Organizer , UserType . Volunteer , UserType . Sponsor ] , user ) ;
269
278
const inputUser = await getUser ( input . nfcId , models ) ;
270
279
if ( inputUser ) {
271
280
const userRet = await checkInUserToEvent ( inputUser . _id . toString ( ) , input . event , models ) ;
@@ -364,12 +373,12 @@ export const resolvers: CustomResolvers<Context> = {
364
373
return userRet ;
365
374
} ,
366
375
removeUserFromEvent : async ( root , { input } , { models, user } ) => {
367
- checkIsAuthorized ( UserType . Organizer , user ) ;
376
+ checkIsAuthorizedArray ( [ UserType . Organizer , UserType . Volunteer , UserType . Sponsor ] , user ) ;
368
377
const userRet = await removeUserFromEvent ( input . user , input . event , models ) ;
369
378
return userRet ;
370
379
} ,
371
380
removeUserFromEventByNfc : async ( root , { input } , { models, user } ) => {
372
- checkIsAuthorized ( UserType . Organizer , user ) ;
381
+ checkIsAuthorizedArray ( [ UserType . Organizer , UserType . Volunteer , UserType . Sponsor ] , user ) ;
373
382
const inputUser = await getUser ( input . nfcId , models ) ;
374
383
if ( inputUser ) {
375
384
const userRet = await removeUserFromEvent ( inputUser . _id . toString ( ) , input . event , models ) ;
@@ -561,6 +570,8 @@ export const resolvers: CustomResolvers<Context> = {
561
570
return 'Organizer' ;
562
571
case UserType . Sponsor :
563
572
return 'Sponsor' ;
573
+ case UserType . Volunteer :
574
+ return 'Volunteer' ;
564
575
default :
565
576
throw new AuthenticationError ( `cannot decode UserType "${ user . userType } ` ) ;
566
577
}
0 commit comments