diff --git a/packages/hydrooj/src/handler/homework.ts b/packages/hydrooj/src/handler/homework.ts index 95a5c96f7..22fa78ee1 100644 --- a/packages/hydrooj/src/handler/homework.ts +++ b/packages/hydrooj/src/handler/homework.ts @@ -20,8 +20,15 @@ import { } from '../service/server'; import { ContestCodeHandler, ContestFileDownloadHandler, ContestScoreboardHandler } from './contest'; -const validatePenaltyRules = (input: string) => yaml.load(input); -const convertPenaltyRules = validatePenaltyRules; +const validatePenaltyRules = (input: string) => { + try { + yaml.load(input); + return true; + } catch (e) { + return false; + } +}; +const convertPenaltyRules = (input: string) => yaml.load(input); class HomeworkMainHandler extends Handler { @param('group', Types.Name, true) diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index 5673701f5..ce91df227 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -145,6 +145,7 @@ export class ProblemModel { tag: string[] = [], meta: ProblemCreateOptions = {}, ) { const [doc] = await ProblemModel.getMulti(domainId, {}) + .withReadPreference('primary') .sort({ docId: -1 }).limit(1).project({ docId: 1 }) .toArray(); const result = await ProblemModel.addWithId( diff --git a/packages/hydrooj/src/upgrade.ts b/packages/hydrooj/src/upgrade.ts index 0fb5df59c..3b7a40ead 100644 --- a/packages/hydrooj/src/upgrade.ts +++ b/packages/hydrooj/src/upgrade.ts @@ -550,6 +550,9 @@ export const coreScripts: MigrationScript[] = [ } } await iterateAllProblem(['domainId', 'docId', 'tag'], async (pdoc) => { + if (pdoc.tag && ['string', 'number'].includes(typeof pdoc.tag)) { + return { tag: [pdoc.tag.toString().trim()].filter((i) => i) }; + } if (pdoc.tag?.some((i) => typeof i !== 'string')) { return { tag: pdoc.tag.filter((i) => i).map((i) => i.toString()) }; }