From 649c198cd970adf7ad0da22d24c57ba778ec0144 Mon Sep 17 00:00:00 2001 From: Maria Mattlin Date: Fri, 22 Jul 2022 10:27:40 -0700 Subject: [PATCH 1/3] PROD-2568 #comment Updated timeline and phase durations #time 1h 30m --- .../work-functions/work-factory/work.factory.ts | 15 ++++++++++++--- .../work-functions/work-store/index.ts | 1 + .../work-store/work-timeline.model.ts | 2 +- .../work-store/work-timelines.config.ts | 10 +++++----- .../work-functions/work-store/work-type.config.ts | 5 +++++ .../work-functions/work-store/work-type.model.ts | 7 +++++-- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts index bdfa3f5f8..34c1b7bb5 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts @@ -10,14 +10,14 @@ import { ChallengePhase, ChallengePhaseName, ChallengeUpdateBody, + PricePackageName, Work, WorkPrice, - WorkPriceBreakdown, WorkPricesType, - WorkPrize, WorkProgress, WorkProgressStep, WorkStatus, + WorkTimelinePhase, WorkType, WorkTypeCategory, WorkTypeConfig, @@ -150,12 +150,21 @@ export function buildUpdateBody(workTypeConfig: WorkTypeConfig, challenge: Chall } // ---- End Build Markdown string ---- // + // If the duration of the Submission phase depends on the package selected (i.e.: Bug Hunt), + // then update the duration for that phase to the correct value + const timeline: Array = workTypeConfig.timeline.map((phase) => { + if (workTypeConfig.submissionPhaseDuration && phase.phaseId === '6950164f-3c5e-4bdc-abc8-22aaf5a1bd49') { + phase.duration = workTypeConfig.submissionPhaseDuration[formData[ChallengeMetadataName.packageType] as PricePackageName] || 0 + } + return phase + }) + const body: ChallengeUpdateBody = { description: templateString.join(''), id: challenge.id, metadata: intakeMetadata, name: formData.projectTitle, - phases: workTypeConfig.timeline, + phases: timeline, prizeSets: priceConfig.getPrizeSets(priceConfig, formData.packageType), } diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts index 72c054c0b..266f53617 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/index.ts @@ -20,6 +20,7 @@ export * from './work-progress.model' export * from './work-progress-step.model' export * from './work-status-filter.enum' export * from './work-status.enum' +export * from './work-timeline-phase.model' export { bugHuntConfig as workBugHuntConfig, WorkTypeConfigs diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts index 06552d227..64cbafbf2 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timeline.model.ts @@ -1,5 +1,5 @@ import { WorkTimelinePhase } from './work-timeline-phase.model' export interface WorkTimeline { - [workType: string]: ReadonlyArray + [workType: string]: Array } diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts index f0346047d..0ffb2389f 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts @@ -6,27 +6,27 @@ export const WorkTimelines: WorkTimeline = { [WorkType.bugHunt]: [ { // Registration - duration: 259200, // 3 days + duration: 43200, // 0.5 day phaseId: 'a93544bc-c165-4af4-b55e-18f3593b457a', }, { // Submission - duration: 259200, // 3 days + duration: 86400, // 1 day, will vary by package phaseId: '6950164f-3c5e-4bdc-abc8-22aaf5a1bd49', }, { // Review - duration: 86400, // 1 day + duration: 172800, // 2 days phaseId: 'aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b', }, { // Appeals - duration: 86400, // 1 day + duration: 43200, // 0.5 day phaseId: '1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6', }, { // Appeals response - duration: 259200, // 3 days + duration: 43200, // 0.5 day phaseId: '797a6af7-cd3f-4436-9fca-9679f773bee9', }, ], diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts index af0da7dd1..955035a29 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.config.ts @@ -34,6 +34,11 @@ export const WorkTypeConfigs: { [workType: string]: WorkTypeConfig } = { }, shortDescription: 'Find bugs quickly and vigorously', startRoute: WorkIntakeFormRoutes[WorkType.bugHunt]['basicInfo'], + submissionPhaseDuration: { + 'advanced': 172800, // 2 days + 'premium': 259200, // 3 days + 'standard': 86400, // 1 day + }, subtitle: `Conduct a time based testing bug hunt where Topcoder experts scramble to find bugs or issues in the system`, tags: [ChallengeTag.qa], timeline: WorkTimelines[WorkType.bugHunt], diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts index 1128e25ca..c8b7cbbef 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-type.model.ts @@ -1,5 +1,5 @@ import { ChallengeTag } from './challenge-tag.enum' -import { WorkPrice } from './work-price.model' +import { PricePackageName, WorkPrice } from './work-price.model' import { WorkTimelinePhase } from './work-timeline-phase.model' import { WorkType } from './work-type.enum' @@ -20,9 +20,12 @@ export interface WorkTypeConfig { } shortDescription: string, startRoute: string, + submissionPhaseDuration?: { + [key in PricePackageName]?: number + }, subtitle: string, tags: Array, - timeline: ReadonlyArray + timeline: Array timelineTemplateId: string, title: string, trackId: string, From c836b567e20d1156d63a273700822d7905200eeb Mon Sep 17 00:00:00 2001 From: Maria Mattlin Date: Fri, 22 Jul 2022 11:56:51 -0700 Subject: [PATCH 2/3] Fixed routes for BH review pages --- src-ts/tools/work/work.routes.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src-ts/tools/work/work.routes.tsx b/src-ts/tools/work/work.routes.tsx index 7b1d4a63e..ba6fb8dc3 100644 --- a/src-ts/tools/work/work.routes.tsx +++ b/src-ts/tools/work/work.routes.tsx @@ -64,20 +64,20 @@ export const workRoutes: Array = [ route: `bug-hunt/basic-info/:workId`, title: intakeFormsTitle, }, - // General { - element: , - route: `:workType/login-prompt`, + element: , + route: `bug-hunt/review`, title: intakeFormsTitle, }, { element: , - route: `:workType/review`, + route: `bug-hunt/review/:workId`, title: intakeFormsTitle, }, + // General { - element: , - route: `:workType/review/:workId`, + element: , + route: `:workType/login-prompt`, title: intakeFormsTitle, }, { From 8a2ca263a106054ea32ff196d3070864a0a46313 Mon Sep 17 00:00:00 2001 From: Maria Mattlin Date: Fri, 22 Jul 2022 14:25:53 -0700 Subject: [PATCH 3/3] PROD-2568 #comment Moved phase ids to config file #time 10m --- .../tools/work/work-lib/work-constants/config.json | 7 +++++++ src-ts/tools/work/work-lib/work-constants/index.ts | 1 + .../work-functions/work-factory/work.factory.ts | 4 ++-- .../work-store/work-timelines.config.ts | 12 +++++++----- 4 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 src-ts/tools/work/work-lib/work-constants/config.json diff --git a/src-ts/tools/work/work-lib/work-constants/config.json b/src-ts/tools/work/work-lib/work-constants/config.json new file mode 100644 index 000000000..29447a65f --- /dev/null +++ b/src-ts/tools/work/work-lib/work-constants/config.json @@ -0,0 +1,7 @@ +{ + "PHASE_ID_APPEALS": "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6", + "PHASE_ID_APPEALS_RESPONSE": "797a6af7-cd3f-4436-9fca-9679f773bee9", + "PHASE_ID_REGISTRATION": "a93544bc-c165-4af4-b55e-18f3593b457a", + "PHASE_ID_REVIEW": "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b", + "PHASE_ID_SUBMISSION": "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49" +} diff --git a/src-ts/tools/work/work-lib/work-constants/index.ts b/src-ts/tools/work/work-lib/work-constants/index.ts index 05f2a6a0c..a226f139c 100644 --- a/src-ts/tools/work/work-lib/work-constants/index.ts +++ b/src-ts/tools/work/work-lib/work-constants/index.ts @@ -1 +1,2 @@ export { default as WorkStrings } from './strings.json' +export { default as WorkConfigConstants } from './config.json' diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts index 3b97346cc..26e8573d3 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-factory/work.factory.ts @@ -1,6 +1,6 @@ import moment from 'moment' -import { WorkStrings } from '../../../work-constants' +import { WorkConfigConstants, WorkStrings } from '../../../work-constants' import { Challenge, ChallengeCreateBody, @@ -153,7 +153,7 @@ export function buildUpdateBody(workTypeConfig: WorkTypeConfig, challenge: Chall // If the duration of the Submission phase depends on the package selected (i.e.: Bug Hunt), // then update the duration for that phase to the correct value const timeline: Array = workTypeConfig.timeline.map((phase) => { - if (workTypeConfig.submissionPhaseDuration && phase.phaseId === '6950164f-3c5e-4bdc-abc8-22aaf5a1bd49') { + if (workTypeConfig.submissionPhaseDuration && phase.phaseId === WorkConfigConstants.PHASE_ID_SUBMISSION) { phase.duration = workTypeConfig.submissionPhaseDuration[formData[ChallengeMetadataName.packageType] as PricePackageName] || 0 } return phase diff --git a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts index 0ffb2389f..e1a921add 100644 --- a/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts +++ b/src-ts/tools/work/work-lib/work-provider/work-functions/work-store/work-timelines.config.ts @@ -1,3 +1,5 @@ +import { WorkConfigConstants } from '../../../work-constants' + import { WorkTimeline } from './work-timeline.model' import { WorkType } from './work-type.enum' @@ -7,27 +9,27 @@ export const WorkTimelines: WorkTimeline = { { // Registration duration: 43200, // 0.5 day - phaseId: 'a93544bc-c165-4af4-b55e-18f3593b457a', + phaseId: WorkConfigConstants.PHASE_ID_REGISTRATION, }, { // Submission duration: 86400, // 1 day, will vary by package - phaseId: '6950164f-3c5e-4bdc-abc8-22aaf5a1bd49', + phaseId: WorkConfigConstants.PHASE_ID_SUBMISSION, }, { // Review duration: 172800, // 2 days - phaseId: 'aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b', + phaseId: WorkConfigConstants.PHASE_ID_REVIEW, }, { // Appeals duration: 43200, // 0.5 day - phaseId: '1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6', + phaseId: WorkConfigConstants.PHASE_ID_APPEALS, }, { // Appeals response duration: 43200, // 0.5 day - phaseId: '797a6af7-cd3f-4436-9fca-9679f773bee9', + phaseId: WorkConfigConstants.PHASE_ID_APPEALS_RESPONSE, }, ], }