Skip to content

Commit 4ee4cb0

Browse files
committed
feat: add sync service
1 parent fc8e067 commit 4ee4cb0

File tree

4 files changed

+140
-20
lines changed

4 files changed

+140
-20
lines changed

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,16 @@
2323
"license": "ISC",
2424
"dependencies": {
2525
"@grpc/grpc-js": "^1.7.1",
26-
"@topcoder-framework/client-relational": "^0.4.3",
27-
"@topcoder-framework/lib-common": "^0.4.3",
26+
"@topcoder-framework/client-relational": "^0.5.2",
27+
"@topcoder-framework/domain-challenge": "^0.5.2",
28+
"@topcoder-framework/lib-common": "^0.5.2",
2829
"dayjs": "^1.11.5",
2930
"dotenv": "^16.0.3",
3031
"grpc-server-reflection": "^0.1.5",
3132
"lodash": "^4.17.21",
3233
"moment": "^2.29.4",
3334
"source-map-support": "^0.5.21",
34-
"topcoder-interface": "github:topcoder-platform/plat-interface-definition#v0.0.19",
35+
"topcoder-interface": "github:topcoder-platform/plat-interface-definition#v0.0.20",
3536
"uuidv4": "^6.2.13"
3637
},
3738
"devDependencies": {

src/domain/Sync.ts

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/* eslint-disable @typescript-eslint/no-unsafe-call */
2+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
3+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
4+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
5+
import { Operator, QueryBuilder } from "@topcoder-framework/client-relational";
6+
import { ChallengeDomain } from "@topcoder-framework/domain-challenge";
7+
import _ from "lodash";
8+
import { queryRunner } from "../helper/QueryRunner";
9+
10+
import LegacyChallengeDomain from "../domain/LegacyChallenge";
11+
import { LegacyChallenge, LegacyChallengeId } from "../models/domain-layer/legacy/challenge";
12+
import { SyncInput, Table } from "../models/domain-layer/legacy/sync";
13+
14+
class LegacySyncDomain {
15+
public async syncLegacy(input: SyncInput): Promise<void> {
16+
const legacyId = input.projectId;
17+
const payload = {};
18+
const legacyChallenge = await LegacyChallengeDomain.getLegacyChallenge(
19+
LegacyChallengeId.create({ legacyChallengeId: legacyId })
20+
);
21+
for (const table of input.updatedTables) {
22+
switch (table.table) {
23+
case "project":
24+
_.assign(payload, this.handleProjectUpdate(table.value, legacyChallenge));
25+
break;
26+
case "project_phase":
27+
break;
28+
case "project_info":
29+
break;
30+
case "phase_criteria":
31+
break;
32+
case "prize":
33+
break;
34+
case "project_payment":
35+
break;
36+
case "submission":
37+
break;
38+
case "resource":
39+
break;
40+
default:
41+
}
42+
}
43+
}
44+
45+
private handleProjectUpdate(columnNames: string[], legacyChallenge: LegacyChallenge) {
46+
const payload = {};
47+
for (const columnName of columnNames) {
48+
switch (columnName) {
49+
case "project_status_id":
50+
_.assign(payload, this.handleStatusChange(legacyChallenge, {}));
51+
break;
52+
case "project_category_id":
53+
break;
54+
case "tc_direct_project_id":
55+
break;
56+
default:
57+
}
58+
}
59+
}
60+
61+
private handleStatusChange(legacyChallenge: LegacyChallenge, v5Challenge) {
62+
const challengeStatusOrders = {
63+
Draft: 1,
64+
Active: 2,
65+
Completed: 3,
66+
Deleted: 3,
67+
Cancelled: 3,
68+
};
69+
const challengeStatusMap = {
70+
1: "Active",
71+
2: "Draft",
72+
3: "Deleted",
73+
7: "Completed",
74+
};
75+
/*
76+
const v4StatusNumber = challengeStatusOrders[challengeStatusMap[legacyChallenge.projectStatusId]] || challengeStatusOrders.Cancelled
77+
const v5StatusNumber = challengeStatusOrders[v5Challenge.status] || challengeStatusOrders.Cancelled
78+
79+
if (v4StatusNumber >= v5StatusNumber) {
80+
return { status: challengeStatusMap[legacyChallenge.projectStatusId] }
81+
} else {
82+
return {}
83+
}
84+
*/
85+
}
86+
}
87+
88+
export default new LegacySyncDomain();

src/service/Sync.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { handleUnaryCall, sendUnaryData, ServerUnaryCall, UntypedHandleCall } from "@grpc/grpc-js";
2+
3+
import { SyncInput } from "../models/domain-layer/legacy/sync";
4+
5+
import { LegacySyncServer, LegacySyncService } from "../models/domain-layer/legacy/services/sync";
6+
7+
import { Empty } from "@topcoder-framework/lib-common";
8+
9+
import LegacySyncDomain from "../domain/Sync";
10+
11+
class LegacySyncServerImpl implements LegacySyncServer {
12+
[name: string]: UntypedHandleCall;
13+
14+
syncLegacy: handleUnaryCall<SyncInput, Empty> = (
15+
call: ServerUnaryCall<SyncInput, Empty>,
16+
callback: sendUnaryData<Empty>
17+
) => {
18+
LegacySyncDomain.syncLegacy(call.request)
19+
.then(() => callback(null))
20+
.catch((err) => callback(err, null));
21+
};
22+
}
23+
24+
export { LegacySyncServerImpl as LegacySyncServer, LegacySyncService };

yarn.lock

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -346,24 +346,35 @@
346346
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
347347
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
348348

349-
"@topcoder-framework/client-relational@^0.4.3":
350-
version "0.4.3"
351-
resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.4.3.tgz#c36aa64e117b23ceddc81d648d6568b6a31af44f"
352-
integrity sha512-N39BneVhIgB5TWAQRFeMBiQzFS2YnGcx3BBI/sfvnD0V1EC8+4GK26PytYy+JVPm9EzF0dceKX4UGA+luUD2gQ==
349+
"@topcoder-framework/client-relational@^0.5.2":
350+
version "0.5.2"
351+
resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/client-relational/-/client-relational-0.5.2.tgz#6015f84f0d7beb6d7d4f9692bbbe23a54509b5b4"
352+
integrity sha512-6H7Fmu2dbJ5I8a60t2ZfEuHm8dEY67ndn5UwuVp0LpGpivcAz0gqlZG0Htoytze9pG/Z/KjjSBlIJXTGPA7E0w==
353353
dependencies:
354354
"@grpc/grpc-js" "^1.8.0"
355-
"@topcoder-framework/lib-common" "^0.4.3"
356-
topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.17"
355+
"@topcoder-framework/lib-common" "^0.5.2"
356+
topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.20"
357357
tslib "^2.4.1"
358358

359-
"@topcoder-framework/lib-common@^0.4.3":
360-
version "0.4.3"
361-
resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.4.3.tgz#3c992482860ec89f151235d24c9efa2be55e30ba"
362-
integrity sha512-0eB6l146r+uSuHoLV7wPC58mZedAabLwkqDeeuh6h5dB0G+esYNBfbr1Hugim0lR8q0Rlny0aqx4ysz2Rf6Ebg==
359+
"@topcoder-framework/domain-challenge@^0.5.2":
360+
version "0.5.2"
361+
resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/domain-challenge/-/domain-challenge-0.5.2.tgz#da42c9d2ec403f3782f3ddf785864ac1c81486f2"
362+
integrity sha512-Th/ofNKLkdyvgIXbabmWYEKj43xlYGzd6gN5FnbmI3Nqgfx1XUfRW9WZqb4SaaEuKirJYGGimcFyVl7exKGl9A==
363+
dependencies:
364+
"@grpc/grpc-js" "^1.8.0"
365+
"@topcoder-framework/client-relational" "^0.5.2"
366+
"@topcoder-framework/lib-common" "^0.5.2"
367+
topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.20"
368+
tslib "^2.4.1"
369+
370+
"@topcoder-framework/lib-common@^0.5.2":
371+
version "0.5.2"
372+
resolved "https://topcoder-409275337247.d.codeartifact.us-east-1.amazonaws.com:443/npm/topcoder-framework/@topcoder-framework/lib-common/-/lib-common-0.5.2.tgz#f60ddfaeddc30190e30c2fd47b2455a4132cb9db"
373+
integrity sha512-joN63C/Atuvc5DDCPeancWOznfr6o6PGcrLcvKBS0wGMkmeeJFFNHzLQGqAZPt9uDk5f+VJtwtLI/7Sfn9EL8w==
363374
dependencies:
364375
"@grpc/grpc-js" "^1.8.0"
365376
rimraf "^3.0.2"
366-
topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.17"
377+
topcoder-interface "github:topcoder-platform/plat-interface-definition#v0.0.20"
367378
tslib "^2.4.1"
368379

369380
"@tsconfig/node10@^1.0.7":
@@ -2532,13 +2543,9 @@ to-regex-range@^5.0.1:
25322543
dependencies:
25332544
is-number "^7.0.0"
25342545

2535-
"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.17":
2536-
version "1.0.0"
2537-
resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/59d8fca8a16906d1a45bfa2f11bba73ce42388d4"
2538-
2539-
"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.19":
2546+
"topcoder-interface@github:topcoder-platform/plat-interface-definition#v0.0.20":
25402547
version "1.0.0"
2541-
resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/336341e8ea7c5a7d5e02b40a56e58e6a2264f210"
2548+
resolved "https://codeload.github.com/topcoder-platform/plat-interface-definition/tar.gz/7f80c4abb46660eb5cff15dfd57b4515b7d49870"
25422549

25432550
tree-kill@^1.2.2:
25442551
version "1.2.2"

0 commit comments

Comments
 (0)