From 7371b0c83cf679e5481bf30526084cd4415c195a Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 10 Dec 2020 13:18:25 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E4=BF=AE=E5=A4=8Dacm=E6=AF=94=E8=B5=9B?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E9=87=8D=E6=B5=8B=E4=BC=9A=E8=AE=A1?= =?UTF-8?q?=E5=85=A5=E5=A4=9A=E4=B8=AA=E7=BD=9A=E6=97=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/model/contest.ts | 2 +- packages/hydrooj/src/model/document.ts | 17 ++++++++++++----- packages/hydrooj/src/service/server.ts | 8 +++++--- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 83c2c9ffe..1ba5d3ca4 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.14.6", + "version": "2.14.7", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/model/contest.ts b/packages/hydrooj/src/model/contest.ts index eda2df1a3..41b764df5 100644 --- a/packages/hydrooj/src/model/contest.ts +++ b/packages/hydrooj/src/model/contest.ts @@ -404,7 +404,7 @@ export async function updateStatus( const tdoc = await get(domainId, tid, type); const tsdoc = await document.revPushStatus(domainId, type, tid, uid, 'journal', { rid, pid, accept, score, - }); + }, 'rid'); if (!tsdoc.attend) throw new ContestNotAttendedError(tid, uid); const journal = _getStatusJournal(tsdoc); const stats = RULES[tdoc.rule].stat(tdoc, journal); diff --git a/packages/hydrooj/src/model/document.ts b/packages/hydrooj/src/model/document.ts index e0eacf48b..55b4e07f0 100644 --- a/packages/hydrooj/src/model/document.ts +++ b/packages/hydrooj/src/model/document.ts @@ -331,13 +331,20 @@ export async function incStatus( export async function revPushStatus( domainId: string, docType: T, docId: DocStatusType[T]['docId'], uid: number, - key: ArrayKeys, value: any, + key: ArrayKeys, value: any, id = '_id', ): Promise { - const res = await collStatus.findOneAndUpdate( - { domainId, docType, docId, uid }, - { $push: { [key]: value }, $inc: { rev: 1 } }, - { upsert: true, returnOriginal: false }, + let res = await collStatus.findOneAndUpdate( + { domainId, docType, docId, uid, [`${key}.${id}`]: value[id] }, + { $set: { [`${key}.$`]: value }, $inc: { rev: 1 } }, + { returnOriginal: false }, ); + if (!res.value) { + res = await collStatus.findOneAndUpdate( + { domainId, docType, docId, uid }, + { $push: { [key]: value }, $inc: { rev: 1 } }, + { upsert: true, returnOriginal: false }, + ); + } return res.value; } diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index a75dfcf24..bf8b992c2 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -614,8 +614,10 @@ export class Handler { async onerror(error: HydroError) { if (!error.msg) error.msg = () => error.message; - console.error(error.msg(), error.params); - console.error(error.stack); + if (!(error instanceof NotFoundError)) { + console.error(error.msg(), error.params); + console.error(error.stack); + } this.response.status = error instanceof UserFacingError ? error.code : 500; this.response.template = error instanceof UserFacingError ? 'error.html' : 'bsod.html'; this.response.body = { @@ -805,7 +807,7 @@ export class ConnectionHandler { async message(message: any) { } // eslint-disable-line onerror(err: HydroError) { - console.error(err); + if (!(err instanceof NotFoundError)) console.error(err); this.send({ error: { name: err.name,