core&ui&elastic: support elastic search and allow search result pagination

This commit is contained in:
undefined committed 2022-03-18 22:48:23 +08:00
1 parent ea6529b523
commit 18fc66ecb7
33 files changed
+411 -244

No files matched your search

+4 -6
View File
@@ -7,9 +7,7 @@ import options from '../options';
import * as bus from '../service/bus';
import db from '../service/db';
import {
builtinLib, builtinModel, builtinScript,
lib, model, script,
service,
lib, model, script, service,
} from './common';
const argv = cac().parse();
@@ -92,14 +90,14 @@ export async function load() {
await db.start(opts);
const storage = require('../service/storage');
await storage.start();
for (const i of builtinLib) require(`../lib/${i}`);
require('../lib/index');
await lib(pending, fail);
const systemModel = require('../model/system');
await systemModel.runConfig();
await service(pending, fail);
for (const i of builtinModel) require(`../model/${i}`);
require('../model/index');
await model(pending, fail);
for (const i of builtinScript) require(`../script/${i}`);
require('../script/index');
await script(pending, fail, []);
await bus.parallel('app/started');
await cli();
+7 -31
View File
@@ -1,3 +1,4 @@
/* eslint-disable import/no-dynamic-require */
/* eslint-disable no-await-in-loop */
/* eslint-disable no-eval */
import os from 'os';
@@ -10,31 +11,6 @@ import * as bus from '../service/bus';
const logger = new Logger('common');
export const builtinLib = [
'jwt', 'download', 'i18n', 'mail', 'useragent',
'crypto', 'misc', 'paginate', 'hash.hydro', 'rank',
'validator', 'ui', 'testdataConfig', 'difficulty', 'content',
'avatar',
];
export const builtinModel = [
'builtin', 'document', 'domain', 'blacklist', 'opcount',
'setting', 'token', 'user', 'storage', 'problem',
'record', 'contest', 'message', 'solution', 'training',
'discussion', 'system', 'oplog', 'blog',
];
export const builtinHandler = [
'home', 'problem', 'record', 'judge', 'user',
'contest', 'training', 'discussion', 'manage', 'import',
'misc', 'homework', 'domain', 'status', 'api', 'blog',
];
export const builtinScript = [
'rating', 'problemStat', 'blacklist', 'deleteUser', 'storageUsage',
'checkUpdate',
];
function getFiles(folder: string, base = ''): string[] {
const files = [];
const f = fs.readdirSync(folder);
@@ -53,7 +29,7 @@ export async function handler(pending: string[], fail: string[]) {
if (fs.existsSync(p) && !fail.includes(i)) {
try {
logger.info('Handler init: %s', i);
eval('require')(p);
require(p);
} catch (e) {
fail.push(i);
logger.error('Handler Load Fail: %s', i);
@@ -136,7 +112,7 @@ export async function template(pending: string[], fail: string[]) {
try {
const files = getFiles(p);
for (const file of files) {
if (file.endsWith('.tsx')) global.Hydro.ui.template[file] = eval('require')(path.resolve(p, file));
if (file.endsWith('.tsx')) global.Hydro.ui.template[file] = require(path.resolve(p, file));
global.Hydro.ui.template[file] = await fs.readFile(path.resolve(p, file), 'utf-8');
}
logger.info('Template init: %s', i);
@@ -157,7 +133,7 @@ export async function model(pending: string[], fail: string[]) {
if (fs.existsSync(p) && !fail.includes(i)) {
try {
logger.info('Model init: %s', i);
eval('require')(p);
require(p);
} catch (e) {
fail.push(i);
logger.error('Model Load Fail: %s', i);
@@ -175,7 +151,7 @@ export async function lib(pending: string[], fail: string[]) {
if (fs.existsSync(p) && !fail.includes(i)) {
try {
logger.info('Lib init: %s', i);
eval('require')(p);
require(p);
} catch (e) {
fail.push(i);
logger.error('Lib Load Fail: %s', i);
@@ -193,7 +169,7 @@ export async function service(pending: string[], fail: string[]) {
if (fs.existsSync(p) && !fail.includes(i)) {
try {
logger.info('Service init: %s', i);
eval('require')(p);
require(p);
} catch (e) {
fail.push(i);
logger.error('Service Load Fail: %s', i);
@@ -215,7 +191,7 @@ export async function script(pending: string[], fail: string[], active: string[]
if (await fs.pathExists(p) && !fail.includes(i)) {
try {
logger.info('Script init: %s', i);
eval('require')(p);
require(p);
} catch (e) {
fail.push(i);
logger.error('Script Load Fail: %s', i);
+5 -14
View File
@@ -9,8 +9,7 @@ import options from '../options';
import * as bus from '../service/bus';
import db from '../service/db';
import {
builtinHandler, builtinLib, builtinModel,
builtinScript, handler, lib, locale, model, script, service, setting, template,
handler, lib, locale, model, script, service, setting, template,
} from './common';
const logger = new Logger('worker');
@@ -45,15 +44,7 @@ export async function load() {
const storage = require('../service/storage');
await storage.start();
if (detail) logger.info('finish: storage.connect');
for (const i of builtinLib) {
let t;
try {
t = require.resolve(`../lib/${i}`);
} catch (e) {
t = require.resolve(`@hydrooj/utils/lib/${i}`);
}
require(t);
}
require('../lib/index');
if (detail) logger.info('finish: lib.builtin');
await lib(pending, fail);
if (detail) logger.info('finish: lib.extra');
@@ -64,9 +55,9 @@ export async function load() {
if (detail) logger.info('finish: server');
await service(pending, fail);
if (detail) logger.info('finish: service.extra');
for (const i of builtinModel) require(`../model/${i}`);
require('../model/index');
if (detail) logger.info('finish: model.builtin');
for (const i of builtinHandler) require(`../handler/${i}`);
require('../handler/index');
if (detail) logger.info('finish: handler.builtin');
await model(pending, fail);
if (detail) logger.info('finish: model.extra');
@@ -79,7 +70,7 @@ export async function load() {
if (detail) logger.info('finish: handler.apply');
const notfound = require('../handler/notfound');
await notfound.apply();
for (const i of builtinScript) require(`../script/${i}`);
require('../script/index');
if (detail) logger.info('finish: script.builtin');
await script(pending, fail, active);
if (detail) logger.info('finish: script.extra');