@@ -2,16 +2,19 @@ import {
2
2
Operator as RelationalOperator ,
3
3
QueryBuilder ,
4
4
} from "@topcoder-framework/client-relational" ;
5
- import { Operator , CheckExistsResult } from "@topcoder-framework/lib-common" ;
5
+ import { CheckExistsResult , CreateResult , Operator } from "@topcoder-framework/lib-common" ;
6
6
import _ from "lodash" ;
7
7
import moment from "moment" ;
8
8
import {
9
9
PhaseStatusIds ,
10
10
PhaseTypeIds ,
11
11
ProjectCategories ,
12
+ ResourceInfoTypeIds ,
12
13
ResourceRoleTypeIds ,
13
14
} from "../config/constants" ;
15
+ import ChallengeHelper from "../helper/ChallengeHelper" ;
14
16
import { queryRunner } from "../helper/QueryRunner" ;
17
+ import UserHelper from "../helper/UserHelper" ;
15
18
import {
16
19
CloseChallengeInput ,
17
20
CreateChallengeInput ,
@@ -20,12 +23,14 @@ import {
20
23
UpdateChallengeInput ,
21
24
} from "../models/domain-layer/legacy/challenge" ;
22
25
import { ProjectSchema } from "../schema/project/Project" ;
23
- import LegacyPhaseDomain from "./Phase " ;
26
+ import LegacyPhaseDomain from "./LegacyPhase " ;
24
27
import LegacyPrizeDomain from "./Prize" ;
25
28
import LegacyProjectInfoDomain from "./ProjectInfo" ;
26
29
import LegacyResourceDomain from "./Resource" ;
27
30
import LegacyReviewDomain from "./Review" ;
28
31
32
+ const TCWEBSERVICE : number = 22838965 ;
33
+
29
34
class LegacyChallengeDomain {
30
35
public async activateChallenge ( input : LegacyChallengeId ) {
31
36
// update challenge status
@@ -394,6 +399,151 @@ class LegacyChallengeDomain {
394
399
}
395
400
}
396
401
402
+ public async create ( input : CreateChallengeInput ) : Promise < CreateResult > {
403
+ const transaction = queryRunner . beginTransaction ( ) ;
404
+
405
+ // insert record in project
406
+ const createProjectQuery = ChallengeHelper . getChallengeCreateQuery (
407
+ {
408
+ projectCategoryId : input . projectCategoryId ,
409
+ projectStatusId : input . projectStatusId ,
410
+ tcDirectProjectId : input . tcDirectProjectId ,
411
+ } ,
412
+ TCWEBSERVICE
413
+ ) ;
414
+
415
+ const createQueryResult = await transaction . add ( createProjectQuery ) ;
416
+
417
+ if ( createQueryResult instanceof Error ) {
418
+ transaction . rollback ( ) ;
419
+ throw createQueryResult ;
420
+ }
421
+
422
+ const projectId = createQueryResult . lastInsertId ! ;
423
+
424
+ // insert record(s) in prize
425
+ const createPrizeQueries = ChallengeHelper . getPrizeCreateQueries (
426
+ projectId ,
427
+ input . winnerPrizes ,
428
+ TCWEBSERVICE
429
+ ) ;
430
+
431
+ for ( const q of createPrizeQueries ) {
432
+ await transaction . add ( q ) ;
433
+ }
434
+
435
+ // insert record(s) in project_info
436
+ const createProjectInfoQueries = ChallengeHelper . getChallengeInfoCreateQueries (
437
+ projectId ,
438
+ input . projectInfo ,
439
+ TCWEBSERVICE
440
+ ) ;
441
+
442
+ for ( const q of createProjectInfoQueries ) {
443
+ await transaction . add ( q ) ;
444
+ }
445
+
446
+ // insert record(s) in project_phase
447
+ for ( const phase of input . phases ) {
448
+ const createPhaseQuery = ChallengeHelper . getPhaseCreateQuery ( projectId , phase , TCWEBSERVICE ) ;
449
+ const createPhaseResult = await transaction . add ( createPhaseQuery ) ;
450
+ if ( createPhaseResult instanceof Error ) {
451
+ transaction . rollback ( ) ;
452
+ throw createPhaseResult ;
453
+ }
454
+ const projectPhaseId = createPhaseResult . lastInsertId ! ;
455
+ // insert record(s) into phase_criteria
456
+ const createPhaseCriteriaQueries = ChallengeHelper . getPhaseCriteriaCreateQueries (
457
+ projectPhaseId ,
458
+ phase . phaseCriteria ,
459
+ TCWEBSERVICE
460
+ ) ;
461
+ for ( const q of createPhaseCriteriaQueries ) {
462
+ await transaction . add ( q ) ;
463
+ }
464
+ }
465
+
466
+ const getObserversToAddQuery = ChallengeHelper . getDirectProjectListUserQuery (
467
+ input . tcDirectProjectId
468
+ ) ;
469
+ const getObserversToAddResult = await transaction . add ( getObserversToAddQuery ) ;
470
+ if ( getObserversToAddResult instanceof Error ) {
471
+ transaction . rollback ( ) ;
472
+ throw getObserversToAddResult ;
473
+ }
474
+
475
+ const adminsToAdd = getObserversToAddResult ?. rows
476
+ ?. map ( ( o ) => ( {
477
+ userId : o [ "user_id" ] ,
478
+ handle : o [ "handle" ] ,
479
+ role : ResourceRoleTypeIds . Observer ,
480
+ } ) )
481
+ . concat ( [
482
+ { userId : 22770213 , handle : "Applications" , role : ResourceRoleTypeIds . Manager } ,
483
+ { userId : TCWEBSERVICE , handle : "tcwebservice" , role : ResourceRoleTypeIds . Manager } ,
484
+ ] ) ;
485
+
486
+ const copilot = input . copilot ;
487
+
488
+ if ( copilot != null ) {
489
+ const getCopilotHandleQuery = UserHelper . getUserHandleQuery ( copilot . userId ) ;
490
+ const getCopilotHandleResult = await transaction . add ( getCopilotHandleQuery ) ;
491
+ if ( getCopilotHandleResult instanceof Error || getCopilotHandleResult . rows ?. length != 1 ) {
492
+ transaction . rollback ( ) ;
493
+ throw getCopilotHandleResult ;
494
+ }
495
+ adminsToAdd ?. push ( {
496
+ userId : copilot . userId ,
497
+ handle : getCopilotHandleResult . rows [ 0 ] . handleLower ,
498
+ role : ResourceRoleTypeIds . Copilot ,
499
+ } ) ;
500
+ }
501
+
502
+ for ( const { userId, handle, role } of adminsToAdd ! ) {
503
+ const createResourceQuery = ChallengeHelper . getResourceCreateQuery (
504
+ projectId ,
505
+ userId ,
506
+ role ,
507
+ undefined ,
508
+ TCWEBSERVICE
509
+ ) ;
510
+ const result = await transaction . add ( createResourceQuery ) ;
511
+ if ( result instanceof Error ) {
512
+ transaction . rollback ( ) ;
513
+ throw result ;
514
+ }
515
+ const resourceId = result . lastInsertId ! ;
516
+ const createResourceInfoQueries = ChallengeHelper . getObserverResourceInfoCreateQueries (
517
+ resourceId ,
518
+ userId ,
519
+ handle ,
520
+ TCWEBSERVICE
521
+ ) ;
522
+
523
+ for ( const q of createResourceInfoQueries ) {
524
+ await transaction . add ( q ) ;
525
+ }
526
+ if ( role === ResourceRoleTypeIds . Copilot && copilot != null ) {
527
+ const createCopilotResourceInfoQuery = ChallengeHelper . getResourceInfoCreateQuery (
528
+ resourceId ,
529
+ ResourceInfoTypeIds . Payment ,
530
+ "" + copilot . fee ,
531
+ TCWEBSERVICE
532
+ ) ;
533
+ await transaction . add ( createCopilotResourceInfoQuery ) ;
534
+ }
535
+ }
536
+
537
+ transaction . commit ( ) ;
538
+
539
+ return {
540
+ kind : {
541
+ $case : "integerId" ,
542
+ integerId : projectId ,
543
+ } ,
544
+ } ;
545
+ }
546
+
397
547
public async update ( input : UpdateChallengeInput ) {
398
548
await queryRunner . run (
399
549
new QueryBuilder ( ProjectSchema )
@@ -426,7 +576,7 @@ class LegacyChallengeDomain {
426
576
return LegacyChallenge . fromPartial ( rows [ 0 ] as LegacyChallenge ) ;
427
577
}
428
578
429
- public async checkChallengeExists ( legacyChallengeId : number ) : Promise < CheckExistsResult > {
579
+ public async checkExists ( legacyChallengeId : number ) : Promise < CheckExistsResult > {
430
580
const { projectId } = ProjectSchema . columns ;
431
581
432
582
const query = new QueryBuilder ( ProjectSchema )
@@ -446,30 +596,6 @@ class LegacyChallengeDomain {
446
596
exists : rows ?. length == 1 ,
447
597
} ;
448
598
}
449
-
450
- public async createLegacyChallenge ( input : CreateChallengeInput ) : Promise < number > {
451
- const transaction = queryRunner . beginTransaction ( ) ;
452
-
453
- const createLegacyChallengeQuery = new QueryBuilder ( ProjectSchema )
454
- . insert ( {
455
- projectStatusId : input . projectStatusId ,
456
- projectCategoryId : input . projectCategoryId ,
457
- tcDirectProjectId : input . tcDirectProjectId ,
458
- } )
459
- . build ( ) ;
460
-
461
- const createLegacyChallengeQueryResult = await transaction . add ( createLegacyChallengeQuery ) ;
462
- if ( createLegacyChallengeQueryResult instanceof Error ) {
463
- transaction . rollback ( ) ;
464
- return Promise . reject ( {
465
- message : "Failed to create legacy challenge" ,
466
- } ) ;
467
- }
468
-
469
- const { lastInsertId : legacyChallengeId } = createLegacyChallengeQueryResult ;
470
-
471
- return Promise . resolve ( legacyChallengeId ! ) ;
472
- }
473
599
}
474
600
475
601
export default new LegacyChallengeDomain ( ) ;
0 commit comments