Skip to content

Commit 0e57993

Browse files
fix(domain-acl): complete activateChallenge
1 parent f632f1b commit 0e57993

File tree

6 files changed

+291
-23
lines changed

6 files changed

+291
-23
lines changed

src/config/constants.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export const PhaseTypeIds = {
88
Submission: 2,
99
Review: 4,
1010
IterativeReview: 18,
11+
SpecificationSubmission: 13
1112
};
1213

1314
export const ProjectCategories = {
@@ -17,4 +18,6 @@ export const ProjectCategories = {
1718
export const ResourceRoleTypeIds = {
1819
IterativeReviewer: 21,
1920
Reviewer: 4,
21+
SpecificationSubmitter: 17,
22+
SpecificationReviewer: 18
2023
};

src/domain/LegacyChallenge.ts

Lines changed: 124 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,140 @@ import LegacyPhaseDomain from "./Phase";
1313
import LegacyReviewDomain from "./Review";
1414
import LegacyResourceDomain from "./Resource";
1515
import LegacyPrizeDomain from "./Prize";
16+
import LegacyProjectInfoDomain from "./ProjectInfo";
1617
import {
1718
PhaseStatusIds,
1819
PhaseTypeIds,
1920
ProjectCategories,
2021
ResourceRoleTypeIds,
2122
} from "../config/constants";
2223
import moment from "moment";
24+
import { CreateResult } from "@topcoder-framework/lib-common";
2325

2426
class LegacyChallengeDomain {
2527
public async activateChallenge(input: LegacyChallengeId) {
26-
// TODO: Activate
28+
// update challenge status
29+
await this.update({
30+
projectId: input.legacyChallengeId,
31+
projectStatusId: 1,
32+
modifyUser: 22838965,
33+
}); // TODO: extract user from interceptors
34+
await LegacyProjectInfoDomain.create({
35+
projectInfoTypeId: 62, // Project activate date
36+
value: moment().format("MM.dd.yyyy hh:mm a"),
37+
projectId: input.legacyChallengeId,
38+
});
39+
const { projectPhases } = await LegacyPhaseDomain.getProjectPhases({
40+
projectId: input.legacyChallengeId,
41+
});
42+
const specificationSubmissionPhase = _.find(
43+
projectPhases,
44+
(p) => p.phaseTypeId === PhaseTypeIds.SpecificationSubmission
45+
);
46+
if (specificationSubmissionPhase) {
47+
// Start spec review
48+
await LegacyPhaseDomain.updateProjectPhase({
49+
projectPhaseId: specificationSubmissionPhase.projectPhaseId,
50+
fixedStartTime: "CURRENT",
51+
scheduledStartTime: "CURRENT",
52+
scheduledEndTime: moment()
53+
.add(specificationSubmissionPhase.duration, "milliseconds")
54+
.format("MM-dd-yyyy hh:mm:ss"),
55+
});
56+
// Check if specification submitter doesn't exist
57+
const { resources } = await LegacyResourceDomain.getResources({
58+
projectId: input.legacyChallengeId,
59+
resourceRoleId: ResourceRoleTypeIds.SpecificationSubmitter,
60+
});
61+
if (resources.length === 0) {
62+
// Create spec submitter
63+
const createResourceRes = await LegacyResourceDomain.createResource({
64+
projectId: input.legacyChallengeId,
65+
resourceRoleId: ResourceRoleTypeIds.SpecificationSubmitter,
66+
userId: 22838965, // TODO: extract user from interceptors
67+
});
68+
const specSubmitterId = createResourceRes.kind
69+
? _.get(createResourceRes.kind, createResourceRes.kind?.$case, undefined)
70+
: undefined;
71+
if (!specSubmitterId) throw new Error("Failed to create specification submitter");
72+
73+
// create resource_info
74+
await LegacyResourceDomain.createResourceInfos({
75+
resourceId: specSubmitterId,
76+
resourceInfoTypeId: 2,
77+
value: "tcwebservice", // TODO: Extract from RPC interceptor
78+
});
79+
await LegacyResourceDomain.createResourceInfos({
80+
resourceId: specSubmitterId,
81+
resourceInfoTypeId: 7,
82+
value: "null",
83+
});
84+
await LegacyResourceDomain.createResourceInfos({
85+
resourceId: specSubmitterId,
86+
resourceInfoTypeId: 8,
87+
value: "N/A",
88+
});
89+
await LegacyResourceDomain.createResourceInfos({
90+
resourceId: specSubmitterId,
91+
resourceInfoTypeId: 1,
92+
value: "22838965", // TODO: Extract from RPC interceptor
93+
});
94+
await LegacyResourceDomain.createResourceInfos({
95+
resourceId: specSubmitterId,
96+
resourceInfoTypeId: 6,
97+
value: moment().add().format("MM-dd-yyyy hh:mm:ss"),
98+
});
99+
100+
// create upload
101+
const upload = await LegacyReviewDomain.createUpload({
102+
projectId: input.legacyChallengeId,
103+
uploadStatusId: 1,
104+
uploadTypeId: 1,
105+
parameter: "parameter", // dummy upload so there is no actual file uploaded
106+
resourceId: specSubmitterId,
107+
projectPhaseId: specificationSubmissionPhase.projectPhaseId,
108+
});
109+
// create submission
110+
const uploadId = upload.kind
111+
? _.get(upload.kind, upload.kind?.$case, undefined)
112+
: undefined;
113+
if (!uploadId) throw new Error("Failed to create upload");
114+
const createSubmissionRes = await LegacyReviewDomain.createSubmission({
115+
uploadId,
116+
submissionStatusId: 1,
117+
submissionTypeId: 2,
118+
});
119+
// resource_submission
120+
const submissionId = createSubmissionRes.kind
121+
? _.get(createSubmissionRes.kind, createSubmissionRes.kind?.$case, undefined)
122+
: undefined;
123+
if (!submissionId) throw new Error("Failed to create submission");
124+
await LegacyReviewDomain.createResourceSubmission({
125+
resourceId: specSubmitterId,
126+
submissionId,
127+
});
128+
// update project_info to set autopilot to On
129+
const { projectInfo } = await LegacyProjectInfoDomain.getProjectInfo({
130+
projectId: input.legacyChallengeId,
131+
projectInfoTypeId: 9,
132+
});
133+
if (projectInfo.length === 0) {
134+
await LegacyProjectInfoDomain.create({
135+
projectId: input.legacyChallengeId,
136+
projectInfoTypeId: 9,
137+
value: "On",
138+
createUser: 22838965, // TODO: Extract from RPC interceptors
139+
});
140+
} else {
141+
await LegacyProjectInfoDomain.update({
142+
projectId: input.legacyChallengeId,
143+
projectInfoTypeId: 9,
144+
value: "On",
145+
modifyUser: 22838965, // TODO: Extract from RPC interceptors
146+
});
147+
}
148+
}
149+
}
27150
}
28151

29152
public async closeChallenge(input: CloseChallengeInput) {

src/domain/Review.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { CreateResult, Empty } from "@topcoder-framework/lib-common";
33
import _ from "lodash";
44
import { queryRunner } from "../helper/QueryRunner";
55
import {
6+
CreateResourceSubmissionInput,
67
CreateReviewInput,
78
CreateReviewItemCommentInput,
89
CreateReviewItemInput,
@@ -27,6 +28,7 @@ import { ScorecardGroupSchema } from "../schema/project/ScorecardGroup";
2728
import { ScorecardSectionSchema } from "../schema/project/ScorecardSection";
2829
import { SubmissionSchema } from "../schema/project/Submission";
2930
import { UploadSchema } from "../schema/project/Upload";
31+
import { ResourceSubmissionSchema } from "../schema/resource/ResourceSubmission";
3032

3133
class LegacyReviewDomain {
3234
public async createUpload(input: CreateUploadInput): Promise<CreateResult> {
@@ -133,6 +135,23 @@ class LegacyReviewDomain {
133135
};
134136
}
135137

138+
public async createResourceSubmission(input: CreateResourceSubmissionInput): Promise<CreateResult> {
139+
const createInput = {
140+
...input,
141+
createUser: 22838965, // tcwebservice | TODO: Get using grpc interceptor
142+
modifyUser: 22838965, // tcwebservice | TODO: Get using grpc interceptor
143+
};
144+
const { lastInsertId } = await queryRunner.run(
145+
new QueryBuilder(ResourceSubmissionSchema).insert(createInput).build()
146+
);
147+
return {
148+
kind: {
149+
$case: "integerId",
150+
integerId: lastInsertId!,
151+
},
152+
};
153+
}
154+
136155
public async createReview(input: CreateReviewInput): Promise<CreateResult> {
137156
const createInput = {
138157
...input,

src/models/domain-layer/legacy/phase.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export interface CreateProjectPhaseInput {
117117

118118
export interface UpdateProjectPhaseInput {
119119
projectPhaseId: number;
120-
phaseStatusId: number;
120+
phaseStatusId?: number | undefined;
121121
fixedStartTime?: string | undefined;
122122
scheduledStartTime?: string | undefined;
123123
scheduledEndTime?: string | undefined;
@@ -1460,7 +1460,7 @@ export const CreateProjectPhaseInput = {
14601460
function createBaseUpdateProjectPhaseInput(): UpdateProjectPhaseInput {
14611461
return {
14621462
projectPhaseId: 0,
1463-
phaseStatusId: 0,
1463+
phaseStatusId: undefined,
14641464
fixedStartTime: undefined,
14651465
scheduledStartTime: undefined,
14661466
scheduledEndTime: undefined,
@@ -1475,7 +1475,7 @@ export const UpdateProjectPhaseInput = {
14751475
if (message.projectPhaseId !== 0) {
14761476
writer.uint32(8).int64(message.projectPhaseId);
14771477
}
1478-
if (message.phaseStatusId !== 0) {
1478+
if (message.phaseStatusId !== undefined) {
14791479
writer.uint32(16).int32(message.phaseStatusId);
14801480
}
14811481
if (message.fixedStartTime !== undefined) {
@@ -1541,7 +1541,7 @@ export const UpdateProjectPhaseInput = {
15411541
fromJSON(object: any): UpdateProjectPhaseInput {
15421542
return {
15431543
projectPhaseId: isSet(object.projectPhaseId) ? Number(object.projectPhaseId) : 0,
1544-
phaseStatusId: isSet(object.phaseStatusId) ? Number(object.phaseStatusId) : 0,
1544+
phaseStatusId: isSet(object.phaseStatusId) ? Number(object.phaseStatusId) : undefined,
15451545
fixedStartTime: isSet(object.fixedStartTime) ? String(object.fixedStartTime) : undefined,
15461546
scheduledStartTime: isSet(object.scheduledStartTime) ? String(object.scheduledStartTime) : undefined,
15471547
scheduledEndTime: isSet(object.scheduledEndTime) ? String(object.scheduledEndTime) : undefined,
@@ -1571,7 +1571,7 @@ export const UpdateProjectPhaseInput = {
15711571
fromPartial<I extends Exact<DeepPartial<UpdateProjectPhaseInput>, I>>(object: I): UpdateProjectPhaseInput {
15721572
const message = createBaseUpdateProjectPhaseInput();
15731573
message.projectPhaseId = object.projectPhaseId ?? 0;
1574-
message.phaseStatusId = object.phaseStatusId ?? 0;
1574+
message.phaseStatusId = object.phaseStatusId ?? undefined;
15751575
message.fixedStartTime = object.fixedStartTime ?? undefined;
15761576
message.scheduledStartTime = object.scheduledStartTime ?? undefined;
15771577
message.scheduledEndTime = object.scheduledEndTime ?? undefined;

src/models/domain-layer/legacy/resource_submission.ts

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@ import _m0 from "protobufjs/minimal";
55
export interface ResourceSubmission {
66
resourceId: number;
77
submissionId: number;
8-
createUser: number;
9-
createDate: number;
10-
modifyUser: number;
11-
modifyDate: number;
8+
createUser?: number | undefined;
9+
createDate?: number | undefined;
10+
modifyUser?: number | undefined;
11+
modifyDate?: number | undefined;
1212
}
1313

1414
function createBaseResourceSubmission(): ResourceSubmission {
15-
return { resourceId: 0, submissionId: 0, createUser: 0, createDate: 0, modifyUser: 0, modifyDate: 0 };
15+
return {
16+
resourceId: 0,
17+
submissionId: 0,
18+
createUser: undefined,
19+
createDate: undefined,
20+
modifyUser: undefined,
21+
modifyDate: undefined,
22+
};
1623
}
1724

1825
export const ResourceSubmission = {
@@ -23,16 +30,16 @@ export const ResourceSubmission = {
2330
if (message.submissionId !== 0) {
2431
writer.uint32(16).int32(message.submissionId);
2532
}
26-
if (message.createUser !== 0) {
33+
if (message.createUser !== undefined) {
2734
writer.uint32(24).int32(message.createUser);
2835
}
29-
if (message.createDate !== 0) {
36+
if (message.createDate !== undefined) {
3037
writer.uint32(32).int64(message.createDate);
3138
}
32-
if (message.modifyUser !== 0) {
39+
if (message.modifyUser !== undefined) {
3340
writer.uint32(40).int32(message.modifyUser);
3441
}
35-
if (message.modifyDate !== 0) {
42+
if (message.modifyDate !== undefined) {
3643
writer.uint32(48).int64(message.modifyDate);
3744
}
3845
return writer;
@@ -75,10 +82,10 @@ export const ResourceSubmission = {
7582
return {
7683
resourceId: isSet(object.resourceId) ? Number(object.resourceId) : 0,
7784
submissionId: isSet(object.submissionId) ? Number(object.submissionId) : 0,
78-
createUser: isSet(object.createUser) ? Number(object.createUser) : 0,
79-
createDate: isSet(object.createDate) ? Number(object.createDate) : 0,
80-
modifyUser: isSet(object.modifyUser) ? Number(object.modifyUser) : 0,
81-
modifyDate: isSet(object.modifyDate) ? Number(object.modifyDate) : 0,
85+
createUser: isSet(object.createUser) ? Number(object.createUser) : undefined,
86+
createDate: isSet(object.createDate) ? Number(object.createDate) : undefined,
87+
modifyUser: isSet(object.modifyUser) ? Number(object.modifyUser) : undefined,
88+
modifyDate: isSet(object.modifyDate) ? Number(object.modifyDate) : undefined,
8289
};
8390
},
8491

@@ -101,10 +108,10 @@ export const ResourceSubmission = {
101108
const message = createBaseResourceSubmission();
102109
message.resourceId = object.resourceId ?? 0;
103110
message.submissionId = object.submissionId ?? 0;
104-
message.createUser = object.createUser ?? 0;
105-
message.createDate = object.createDate ?? 0;
106-
message.modifyUser = object.modifyUser ?? 0;
107-
message.modifyDate = object.modifyDate ?? 0;
111+
message.createUser = object.createUser ?? undefined;
112+
message.createDate = object.createDate ?? undefined;
113+
message.modifyUser = object.modifyUser ?? undefined;
114+
message.modifyDate = object.modifyDate ?? undefined;
108115
return message;
109116
},
110117
};

0 commit comments

Comments
 (0)