diff --git a/backend/src/api/controllers/result.ts b/backend/src/api/controllers/result.ts index c119b5e5a969..569c18cae215 100644 --- a/backend/src/api/controllers/result.ts +++ b/backend/src/api/controllers/result.ts @@ -443,7 +443,7 @@ export async function addResult( } if (req.ctx.configuration.users.lastHashesCheck.enabled) { - let lastHashes = user.lastReultHashes ?? []; + let lastHashes = user.lastResultHashes ?? []; if (lastHashes.includes(resulthash)) { void addLog( "duplicate_result", diff --git a/backend/src/api/controllers/user.ts b/backend/src/api/controllers/user.ts index b89a7874515f..e54038691d5a 100644 --- a/backend/src/api/controllers/user.ts +++ b/backend/src/api/controllers/user.ts @@ -510,7 +510,7 @@ type RelevantUserInfo = Omit< | "nameHistory" | "lastNameChange" | "_id" - | "lastReultHashes" //TODO fix typo + | "lastResultHashes" | "note" | "ips" | "testActivity" @@ -525,11 +525,11 @@ function getRelevantUserInfo(user: UserDAL.DBUser): RelevantUserInfo { "nameHistory", "lastNameChange", "_id", - "lastReultHashes", //TODO fix typo "note", "ips", "testActivity", "suspicious", + "lastResultHashes", ]) as RelevantUserInfo; } diff --git a/backend/src/dal/user.ts b/backend/src/dal/user.ts index ada92f0ee764..ef7d8522c850 100644 --- a/backend/src/dal/user.ts +++ b/backend/src/dal/user.ts @@ -27,12 +27,7 @@ import { CountByYearAndDay, Friend, } from "@monkeytype/schemas/users"; -import { - Mode, - Mode2, - PersonalBest, - PersonalBests, -} from "@monkeytype/schemas/shared"; +import { Mode, Mode2, PersonalBest } from "@monkeytype/schemas/shared"; import { addImportantLog } from "./logs"; import { Result as ResultType } from "@monkeytype/schemas/results"; import { Configuration } from "@monkeytype/schemas/configuration"; @@ -67,6 +62,7 @@ export type DBUser = Omit< testActivity?: CountByYearAndDay; suspicious?: boolean; note?: string; + lastResultHashes?: string[]; }; const SECONDS_PER_HOUR = 3600; @@ -586,7 +582,10 @@ export async function updateLastHashes( { uid }, { $set: { - lastReultHashes: lastHashes, //TODO fix typo + lastResultHashes: lastHashes, + }, + $unset: { + lastReultHashes: "", // remove Legacy property }, }, ); @@ -1368,7 +1367,7 @@ export async function getFriends(uid: string): Promise { ); } -function migrateUser(user: T): T { +function migrateUser(user: T): T { user.personalBests ??= { time: {}, words: {}, @@ -1377,5 +1376,10 @@ function migrateUser(user: T): T { custom: {}, }; + if ("lastReultHashes" in user) { + user.lastResultHashes = user["lastReultHashes"] as string[]; + delete user["lastReultHashes"]; + } + return user; } diff --git a/packages/schemas/src/users.ts b/packages/schemas/src/users.ts index e81e577fa9db..d89c9c0833ec 100644 --- a/packages/schemas/src/users.ts +++ b/packages/schemas/src/users.ts @@ -255,7 +255,6 @@ export const UserSchema = z.object({ uid: z.string(), //defined by firebase, no validation should be applied addedAt: z.number().int().nonnegative(), personalBests: PersonalBestsSchema, - lastReultHashes: z.array(z.string()).optional(), //TODO: fix typo (it's in the db too) completedTests: z.number().int().nonnegative().optional(), startedTests: z.number().int().nonnegative().optional(), timeTyping: z