@@ -2,9 +2,8 @@ import { Request } from 'express';
2
2
import CoffeeChatDao from '../dao/CoffeeChatDao' ;
3
3
import PermissionsManager from '../utils/permissionsManager' ;
4
4
import { BadRequestError , PermissionError } from '../utils/errors' ;
5
- import { getMember , allMembers } from './memberAPI' ;
6
- import { LEAD_ROLES } from '../consts' ;
7
- import { getGeneralRoleFromLeadType } from '../utils/memberUtil' ;
5
+ import { getMember } from './memberAPI' ;
6
+ import { ADVISOR_ROLES } from '../consts' ;
8
7
import { sendCoffeeChatReminder } from './mailAPI' ;
9
8
10
9
const coffeeChatDao = new CoffeeChatDao ( ) ;
@@ -66,12 +65,15 @@ export const createCoffeeChat = async (
66
65
'approved' ,
67
66
coffeeChat . otherMember
68
67
) ;
69
- const prevChats = [ ...pendingChats , ...approvedChats ] ;
68
+ const prevChats = [
69
+ ...pendingChats . filter ( ( chat ) => ! chat . isArchived ) ,
70
+ ...approvedChats . filter ( ( chat ) => ! chat . isArchived )
71
+ ] ;
70
72
const chatExists = prevChats . length > 0 ;
71
73
72
74
if ( chatExists ) {
73
75
throw new Error (
74
- 'Cannot create coffee chat with member. Previous coffee chats from previous semesters exist.'
76
+ 'Cannot create coffee chat with member. Coffee chats from current or previous semesters exist.'
75
77
) ;
76
78
}
77
79
@@ -203,138 +205,22 @@ export const checkMemberMeetsCategory = async (
203
205
submitterEmail : string ,
204
206
category : string
205
207
) : Promise < { status : MemberMeetsCategoryStatus ; message : string } > => {
206
- const otherMemberProperties = await CoffeeChatDao . getMemberProperties ( otherMemberEmail ) ;
207
- const submitterProperties = await CoffeeChatDao . getMemberProperties ( submitterEmail ) ;
208
208
const otherMember = await getMember ( otherMemberEmail ) ;
209
209
const submitter = await getMember ( submitterEmail ) ;
210
- const haveNoCommonSubteams = ( member1 : IdolMember , member2 : IdolMember ) : boolean =>
211
- member2 . subteams . every ( ( team ) => ! member1 . subteams . includes ( team ) ) &&
212
- member1 . subteams . every ( ( team ) => ! member2 . subteams . includes ( team ) ) ;
213
210
let status : MemberMeetsCategoryStatus = 'no data' ;
214
211
let message : string = '' ;
215
212
216
- // If otherMember doesn't exist in the DB, assume they are an alumni
217
- if ( ! otherMember && category === 'an alumni' ) {
218
- return { status : 'pass' , message } ;
219
- }
220
-
221
213
// If otherMember and submitter don't exist, status should stay undefined
222
214
if ( otherMember && submitter ) {
223
- if ( category === 'an alumni' ) {
224
- status = ( await allMembers ( ) ) . every ( ( member ) => member . email !== otherMember . email )
225
- ? 'pass'
226
- : 'fail' ;
227
- if ( status === 'fail' ) {
228
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not an alumni` ;
229
- }
230
- } else if ( category === 'courseplan member' ) {
231
- status = otherMember . subteams . includes ( 'courseplan' ) ? 'pass' : 'fail' ;
232
- if ( status === 'fail' ) {
233
- message = `${ otherMember . firstName } ${ otherMember ?. lastName } is not a CoursePlan member` ;
234
- }
235
- } else if ( category === 'business member' ) {
236
- status = otherMember . role === 'business' ? 'pass' : 'fail' ;
237
- if ( status === 'fail' ) {
238
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a business member` ;
239
- }
240
- } else if ( category === 'idol member' ) {
241
- status = otherMember . subteams . includes ( 'idol' ) ? 'pass' : 'fail' ;
242
- if ( status === 'fail' ) {
243
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not an IDOL member` ;
244
- }
245
- } else if ( category === 'curaise member' ) {
246
- status = otherMember . subteams . includes ( 'curaise' ) ? 'pass' : 'fail' ;
247
- if ( status === 'fail' ) {
248
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a CURaise member` ;
249
- }
250
- } else if ( category === 'cornellgo member' ) {
251
- status = otherMember . subteams . includes ( 'cornellgo' ) ? 'pass' : 'fail' ;
252
- if ( status === 'fail' ) {
253
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a CornellGo member` ;
254
- }
255
- } else if ( category === 'carriage member' ) {
256
- status = otherMember . subteams . includes ( 'carriage' ) ? 'pass' : 'fail' ;
215
+ if ( category === 'a newbie' ) {
216
+ status = otherMember . semesterJoined === 'Spring 2025' ? 'pass' : 'fail' ;
257
217
if ( status === 'fail' ) {
258
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a Carriage member ` ;
218
+ message = `${ otherMember . firstName } ${ otherMember . lastName } is not a newbie ` ;
259
219
}
260
- } else if ( category === 'qmi member ' ) {
261
- status = otherMember . subteams . includes ( 'queuemein' ) ? 'pass' : 'fail' ;
220
+ } else if ( category === 'is an advisor ' ) {
221
+ status = ADVISOR_ROLES . includes ( otherMember . role ) ? 'pass' : 'fail' ;
262
222
if ( status === 'fail' ) {
263
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a QMI member` ;
264
- }
265
- } else if ( category === 'cuapts member' ) {
266
- status = otherMember . subteams . includes ( 'cuapts' ) ? 'pass' : 'fail' ;
267
- if ( status === 'fail' ) {
268
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a CUApts member` ;
269
- }
270
- } else if ( category === 'a pm (not your team)' ) {
271
- const isPm = otherMember . role === 'pm' ;
272
- const notSameTeam = haveNoCommonSubteams ( submitter , otherMember ) ;
273
- status = isPm && notSameTeam ? 'pass' : 'fail' ;
274
- if ( status === 'fail' ) {
275
- if ( ! isPm ) {
276
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a PM` ;
277
- } else {
278
- message = `${ otherMember . firstName } ${ otherMember . lastName } is a PM, but is on the same team as ${ submitter ?. firstName } ${ submitter ?. lastName } ` ;
279
- }
280
- }
281
- } else if ( category === 'a tpm (not your team)' ) {
282
- const isTpm = otherMember . role === 'tpm' ;
283
- const notSameTeam = haveNoCommonSubteams ( submitter , otherMember ) ;
284
- status = isTpm && notSameTeam ? 'pass' : 'fail' ;
285
- if ( status === 'fail' ) {
286
- if ( ! isTpm ) {
287
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a TPM` ;
288
- } else {
289
- message = `${ otherMember . firstName } ${ otherMember . lastName } is a TPM, but is on the same team as ${ submitter ?. firstName } ${ submitter ?. lastName } ` ;
290
- }
291
- }
292
- }
293
-
294
- // If otherMemberProperties doesn't exist, status should stay undefined
295
- if ( otherMemberProperties ) {
296
- if ( category === 'a newbie' ) {
297
- status = otherMemberProperties . newbie ? 'pass' : 'fail' ;
298
- if ( status === 'fail' ) {
299
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a newbie` ;
300
- }
301
- } else if ( category === 'is/was a TA' ) {
302
- status = otherMemberProperties . ta ? 'pass' : 'fail' ;
303
- if ( status === 'fail' ) {
304
- message = `${ otherMember . firstName } ${ otherMember . lastName } was never a TA` ;
305
- }
306
- } else if ( category === 'major/minor that is not cs/infosci' ) {
307
- status = otherMemberProperties . notCsOrInfosci ? 'pass' : 'fail' ;
308
- if ( status === 'fail' ) {
309
- message = `${ otherMember . firstName } ${ otherMember . lastName } is a CS or Infosci major` ;
310
- }
311
- }
312
-
313
- // If submitterProperties doesn't exist, status should stay undefined
314
- if ( submitterProperties ) {
315
- if ( category === 'from a different college' ) {
316
- status = otherMemberProperties . college !== submitterProperties . college ? 'pass' : 'fail' ;
317
- if ( status === 'fail' ) {
318
- message = `${ otherMember . firstName } ${ otherMember . lastName } is from the same college as ${ submitter . firstName } ${ submitter . lastName } (${ otherMemberProperties . college } )` ;
319
- }
320
- }
321
- }
322
- }
323
-
324
- if ( category === 'a lead (not your role)' ) {
325
- const isLead = LEAD_ROLES . includes ( otherMember . role ) ;
326
- if ( ! isLead ) {
327
- status = 'fail' ;
328
- message = `${ otherMember . firstName } ${ otherMember . lastName } is not a lead` ;
329
- } else {
330
- const diffRole = ! LEAD_ROLES . includes ( submitter . role )
331
- ? getGeneralRoleFromLeadType ( otherMember . role ) !== submitter . role
332
- : getGeneralRoleFromLeadType ( otherMember . role ) !==
333
- getGeneralRoleFromLeadType ( submitter . role ) ;
334
- status = diffRole ? 'pass' : 'fail' ;
335
- if ( ! diffRole ) {
336
- message = `${ otherMember . firstName } ${ otherMember . lastName } is a lead, but from the same role (${ submitter . role } ) as ${ submitter . firstName } ${ submitter . lastName } ` ;
337
- }
223
+ message = `${ otherMember . firstName } ${ otherMember . lastName } is not an advisor` ;
338
224
}
339
225
}
340
226
}
0 commit comments