Skip to content

Commit cdfc783

Browse files
authored
refactor(types): shared config and preset types (#5024)
* build: include all shared types files instead of just one * move config property value types to a shared file * backend build issues * shared preset and config types preset and config ape types * typo * ignoring unused warnings * fixed merge
1 parent 67c10a9 commit cdfc783

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+572
-577
lines changed

backend/__tests__/dal/result.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as ResultDal from "../../src/dal/result";
22
import { ObjectId } from "mongodb";
33
import * as UserDal from "../../src/dal/user";
44

5-
type MonkeyTypesResult = SharedTypes.DBResult<SharedTypes.Mode>;
5+
type MonkeyTypesResult = SharedTypes.DBResult<SharedTypes.Config.Mode>;
66

77
let uid: string = "";
88
const timestamp = Date.now() - 60000;

backend/src/api/controllers/user.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,8 @@ export async function updateLbMemory(
580580
): Promise<MonkeyResponse> {
581581
const { uid } = req.ctx.decodedToken;
582582
const { mode, language, rank } = req.body;
583-
const mode2 = req.body.mode2 as SharedTypes.Mode2<SharedTypes.Mode>;
583+
const mode2 = req.body
584+
.mode2 as SharedTypes.Config.Mode2<SharedTypes.Config.Mode>;
584585

585586
await UserDAL.updateLbMemory(uid, mode, mode2, language, rank);
586587
return new MonkeyResponse("Leaderboard memory updated");

backend/src/dal/preset.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import MonkeyError from "../utils/error";
22
import * as db from "../init/db";
3-
import { ObjectId, Filter } from "mongodb";
3+
import { ObjectId, Filter, Collection, WithId } from "mongodb";
44

55
const MAX_PRESETS = 10;
6-
const COLLECTION_NAME = "presets";
76

8-
function getPresetKeyFilter(uid: string, keyId: string): Filter<any> {
7+
type DBConfigPreset = SharedTypes.WithObjectId<SharedTypes.DBConfigPreset>;
8+
9+
function getPresetKeyFilter(
10+
uid: string,
11+
keyId: string
12+
): Filter<DBConfigPreset> {
913
return {
1014
_id: new ObjectId(keyId),
1115
uid,
@@ -16,10 +20,11 @@ interface PresetCreationResult {
1620
presetId: string;
1721
}
1822

19-
// TODO: Add typings for presets/configs, must look into shared type declarations.
20-
export async function getPresets(uid: string): Promise<any[]> {
21-
const presets = await db
22-
.collection(COLLECTION_NAME)
23+
export const getPresetsCollection = (): Collection<WithId<DBConfigPreset>> =>
24+
db.collection<DBConfigPreset>("presets");
25+
26+
export async function getPresets(uid: string): Promise<DBConfigPreset[]> {
27+
const presets = await getPresetsCollection()
2328
.find({ uid })
2429
.sort({ timestamp: -1 })
2530
.toArray(); // this needs to be changed to later take patreon into consideration
@@ -36,9 +41,12 @@ export async function addPreset(
3641
throw new MonkeyError(409, "Too many presets");
3742
}
3843

39-
const preset = await db
40-
.collection(COLLECTION_NAME)
41-
.insertOne({ uid, name, config } as any);
44+
const preset = await getPresetsCollection().insertOne({
45+
_id: new ObjectId(),
46+
uid,
47+
name,
48+
config,
49+
});
4250
return {
4351
presetId: preset.insertedId.toHexString(),
4452
};
@@ -54,24 +62,24 @@ export async function editPreset(
5462
config !== undefined && config !== null && Object.keys(config).length > 0
5563
? { name, config }
5664
: { name };
57-
await db
58-
.collection(COLLECTION_NAME)
59-
.updateOne(getPresetKeyFilter(uid, presetId), { $set: presetUpdates });
65+
await getPresetsCollection().updateOne(getPresetKeyFilter(uid, presetId), {
66+
$set: presetUpdates,
67+
});
6068
}
6169

6270
export async function removePreset(
6371
uid: string,
6472
presetId: string
6573
): Promise<void> {
66-
const deleteResult = await db
67-
.collection(COLLECTION_NAME)
68-
.deleteOne(getPresetKeyFilter(uid, presetId));
74+
const deleteResult = await getPresetsCollection().deleteOne(
75+
getPresetKeyFilter(uid, presetId)
76+
);
6977

7078
if (deleteResult.deletedCount === 0) {
7179
throw new MonkeyError(404, "Preset not found");
7280
}
7381
}
7482

7583
export async function deleteAllPresets(uid: string): Promise<void> {
76-
await db.collection(COLLECTION_NAME).deleteMany({ uid });
84+
await getPresetsCollection().deleteMany({ uid });
7785
}

backend/src/dal/result.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import * as db from "../init/db";
55

66
import { getUser, getTags } from "./user";
77

8-
type DBResult = SharedTypes.DBResult<SharedTypes.Mode>;
8+
type DBResult = SharedTypes.DBResult<SharedTypes.Config.Mode>;
99

1010
export async function addResult(
1111
uid: string,

backend/src/dal/user.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import { flattenObjectDeep, isToday, isYesterday } from "../utils/misc";
1010

1111
const SECONDS_PER_HOUR = 3600;
1212

13-
type Result = Omit<SharedTypes.DBResult<SharedTypes.Mode>, "_id" | "name">;
13+
type Result = Omit<
14+
SharedTypes.DBResult<SharedTypes.Config.Mode>,
15+
"_id" | "name"
16+
>;
1417

1518
// Export for use in tests
1619
export const getUsersCollection = (): Collection<WithId<MonkeyTypes.User>> =>
@@ -385,8 +388,8 @@ export async function removeTagPb(uid: string, _id: string): Promise<void> {
385388

386389
export async function updateLbMemory(
387390
uid: string,
388-
mode: SharedTypes.Mode,
389-
mode2: SharedTypes.Mode2<SharedTypes.Mode>,
391+
mode: SharedTypes.Config.Mode,
392+
mode2: SharedTypes.Config.Mode2<SharedTypes.Config.Mode>,
390393
language: string,
391394
rank: number
392395
): Promise<void> {

backend/src/types/types.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ declare namespace MonkeyTypes {
143143
_id: ObjectId;
144144
acc: number;
145145
consistency: number;
146-
difficulty: SharedTypes.Difficulty;
146+
difficulty: SharedTypes.Config.Difficulty;
147147
lazyMode: boolean;
148148
language: string;
149149
punctuation: boolean;

backend/src/utils/pb.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ interface CheckAndUpdatePbResult {
77
lbPersonalBests?: MonkeyTypes.LbPersonalBests;
88
}
99

10-
type Result = Omit<SharedTypes.DBResult<SharedTypes.Mode>, "_id" | "name">;
10+
type Result = Omit<
11+
SharedTypes.DBResult<SharedTypes.Config.Mode>,
12+
"_id" | "name"
13+
>;
1114

1215
export function canFunboxGetPb(result: Result): boolean {
1316
const funbox = result.funbox;
@@ -32,7 +35,7 @@ export function checkAndUpdatePb(
3235
result: Result
3336
): CheckAndUpdatePbResult {
3437
const mode = result.mode;
35-
const mode2 = result.mode2 as SharedTypes.Mode2<"time">;
38+
const mode2 = result.mode2 as SharedTypes.Config.Mode2<"time">;
3639

3740
const userPb = userPersonalBests ?? {};
3841
userPb[mode] ??= {};
@@ -155,7 +158,7 @@ function updateLeaderboardPersonalBests(
155158
}
156159

157160
const mode = result.mode;
158-
const mode2 = result.mode2 as SharedTypes.Mode2<"time">;
161+
const mode2 = result.mode2 as SharedTypes.Config.Mode2<"time">;
159162

160163
lbPersonalBests[mode] = lbPersonalBests[mode] ?? {};
161164
const lbMode2 = lbPersonalBests[mode][mode2] as MonkeyTypes.LbPersonalBests;

backend/src/utils/prometheus.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export function setLeaderboard(
8989
}
9090

9191
export function incrementResult(
92-
res: SharedTypes.Result<SharedTypes.Mode>
92+
res: SharedTypes.Result<SharedTypes.Config.Mode>
9393
): void {
9494
const {
9595
mode,

backend/src/utils/result.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ObjectId } from "mongodb";
22

3-
type Result = SharedTypes.DBResult<SharedTypes.Mode>;
3+
type Result = SharedTypes.DBResult<SharedTypes.Config.Mode>;
44

55
export function buildDbResult(
66
completedEvent: SharedTypes.CompletedEvent,

backend/tsconfig.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@
2222
"ts-node": {
2323
"files": true
2424
},
25-
"files": ["./src/types/types.d.ts", "../shared-types/types.d.ts"],
26-
"include": ["./src/**/*"],
25+
"files": [
26+
"./src/types/types.d.ts",
27+
"../shared-types/types.d.ts",
28+
"../shared-types/config.d.ts"
29+
],
30+
"include": ["./src/**/*", "../shared-types/**/*.d.ts"],
2731
"exclude": [
2832
"node_modules",
2933
"build",

0 commit comments

Comments
 (0)