diff --git a/packages/hydrojudge/setting.yaml b/packages/hydrojudge/setting.yaml index 202d11719..ebe69dfe2 100644 --- a/packages/hydrojudge/setting.yaml +++ b/packages/hydrojudge/setting.yaml @@ -43,6 +43,7 @@ langs: type: compiler compile: /usr/bin/javac -d ${dir} -encoding utf8 ./Main.java code_file: Main.java + target: Main.class execute: /usr/bin/java Main py: type: compiler diff --git a/packages/hydrooj/src/model/domain.ts b/packages/hydrooj/src/model/domain.ts index 9934d48ee..c3ea675e3 100644 --- a/packages/hydrooj/src/model/domain.ts +++ b/packages/hydrooj/src/model/domain.ts @@ -2,6 +2,7 @@ import { Dictionary } from 'lodash'; import { FilterQuery } from 'mongodb'; import { BUILTIN_ROLES, PRIV } from './builtin'; import { DomainDoc } from '../interface'; +import * as bus from '../service/bus'; import * as db from '../service/db'; const coll = db.collection('domain'); @@ -39,20 +40,28 @@ export async function add(domainId: string, owner: number, name: string, bulleti gravatar: '', pidCounter: 0, }; + await bus.serial('domain/create', ddoc); await coll.insertOne(ddoc); return domainId; } -export function get(domainId: string): Promise { - return coll.findOne({ _id: domainId }); +export async function get(domainId: string): Promise { + const query: FilterQuery = { _id: domainId }; + await bus.serial('domain/before-get', query); + const result = await coll.findOne(query); + await bus.serial('domain/get', result); + return result; } export function getMulti(query: FilterQuery = {}) { return coll.find(query); } -export function edit(domainId: string, $set: Partial) { - return coll.updateOne({ _id: domainId }, { $set }); +export async function edit(domainId: string, $set: Partial) { + await bus.serial('domain/before-update', domainId, $set); + const result = await coll.findOneAndUpdate({ _id: domainId }, { $set }, { returnOriginal: false }); + await bus.serial('domain/update', domainId, $set, result.value); + return result.value; } export async function inc(domainId: string, field: keyof DomainDoc, n: number): Promise { diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 7d4e6882a..dd0adaed7 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -6,6 +6,7 @@ import { Logger } from '../logger'; import { Mdoc, Pdoc, Rdoc, TrainingDoc, User, } from '../interface'; +import { DomainDoc } from '../loader'; type DocType = import('../model/document').DocType; @@ -39,6 +40,12 @@ export interface EventMap { 'user/message': (uid: number, mdoc: Mdoc, udoc: User) => void 'user/get': (udoc: User) => void + 'domain/create': (ddoc: DomainDoc) => void + 'domain/before-get': (query: FilterQuery) => void + 'domain/get': (ddoc: DomainDoc) => void + 'domain/before-update': (domainId: string, $set: Partial) => void + 'domain/update': (domainId: string, $set: Partial, ddoc: DomainDoc) => void + 'document/add': (doc: any) => VoidReturn 'document/set': (domainId: string, docType: T, docId: DocType[T], $set: any) => VoidReturn