core: sync rdoc.score to psdoc.score

This commit is contained in:
undefined committed 2021-05-06 12:10:22 +08:00
1 parent fda62809a1
commit 9e94ede71f
5 files changed
+27 -5

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "2.24.12",
"version": "2.24.13",
"bin": "bin/hydrooj.js",
"main": "dist/loader.js",
"typings": "dist/loader.d.ts",
+1 -1
View File
@@ -21,7 +21,7 @@ const logger = new Logger('judge');
async function _postJudge(rdoc: Rdoc) {
if (typeof rdoc.input === 'string') return;
const accept = rdoc.status === builtin.STATUS.STATUS_ACCEPTED;
const updated = await problem.updateStatus(rdoc.domainId, rdoc.pid, rdoc.uid, rdoc._id, rdoc.status);
const updated = await problem.updateStatus(rdoc.domainId, rdoc.pid, rdoc.uid, rdoc._id, rdoc.status, rdoc.score);
if (rdoc.contest) {
await contest.updateStatus(
rdoc.domainId, rdoc.contest.tid, rdoc.uid,
+2 -2
View File
@@ -228,11 +228,11 @@ export class ProblemModel {
static async updateStatus(
domainId: string, pid: number, uid: number,
rid: ObjectID, status: number,
rid: ObjectID, status: number, score: number,
) {
const res = await document.setIfNotStatus(
domainId, document.TYPE_PROBLEM, pid, uid,
'status', status, STATUS.STATUS_ACCEPTED, { rid },
'status', status, STATUS.STATUS_ACCEPTED, { rid, score },
);
return !!res;
}
+12
View File
@@ -1,6 +1,8 @@
/* eslint-disable no-await-in-loop */
import { FilterQuery } from 'mongodb';
import type { DomainDoc, Udoc } from './interface';
import domain from './model/domain';
import * as document from './model/document';
import user from './model/user';
import problem, { Field, Pdoc } from './model/problem';
@@ -14,6 +16,16 @@ export async function iterateAllUser(cb: (udoc: Udoc, current?: number, total?:
for (const i in udocs) await cb(udocs[i], +i, udocs.length);
}
export async function iterateAllPsdoc(filter: FilterQuery<any>, cb: (psdoc: any) => Promise<any>) {
await iterateAllDomain(async ({ _id: domainId }) => {
const cursor = document.getMultiStatus(domainId, document.TYPE_PROBLEM, filter);
while (await cursor.hasNext()) {
const psdoc = await cursor.next();
await cb(psdoc);
}
});
}
interface PartialPdoc extends Pdoc {
[key: string]: any,
}
+11 -1
View File
@@ -10,7 +10,9 @@ import { Progress } from './ui';
import { Rdoc } from './interface';
import { Logger } from './logger';
import { streamToBuffer } from './utils';
import { iterateAllDomain, iterateAllProblem, iterateAllUser } from './pipelineUtils';
import {
iterateAllDomain, iterateAllProblem, iterateAllPsdoc, iterateAllUser,
} from './pipelineUtils';
import gridfs from './service/gridfs';
import storage from './service/storage';
import db from './service/db';
@@ -21,6 +23,7 @@ import domain from './model/domain';
import * as document from './model/document';
import * as system from './model/system';
import { STATUS } from './model/builtin';
import RecordModel from './model/record';
const logger = new Logger('upgrade');
type UpgradeScript = void | (() => Promise<boolean | void>);
@@ -317,6 +320,13 @@ const scripts: UpgradeScript[] = [
});
return true;
},
async function _25_26() {
await iterateAllPsdoc({ rid: { $exists: true } }, async (psdoc) => {
const rdoc = await RecordModel.get(psdoc.domainId, psdoc.rid);
await document.setStatus(psdoc.domainId, document.TYPE_PROBLEM, rdoc.pid, rdoc.uid, { score: rdoc.score });
});
return true;
},
];
export default scripts;