mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
migrate-vijos: support to latest ver
This commit is contained in:
1 parent
77a54b7663
commit
46cb2e31dd
2 files changed
+5
-48
No files matched your search
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@hydrooj/migrate-vijos",
|
"name": "@hydrooj/migrate-vijos",
|
||||||
"version": "1.3.9",
|
"version": "1.4.0",
|
||||||
"main": "package.json",
|
"main": "package.json",
|
||||||
"repository": "git@github.com:hydro-dev/Hydro.git",
|
"repository": "git@github.com:hydro-dev/Hydro.git",
|
||||||
"author": "undefined <i@undefined.moe>",
|
"author": "undefined <i@undefined.moe>",
|
||||||
@@ -10,14 +10,12 @@
|
|||||||
"build": "tsc"
|
"build": "tsc"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/js-yaml": "^4.0.0",
|
|
||||||
"@types/mongodb": "^3.6.7"
|
"@types/mongodb": "^3.6.7"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"hydrooj": "2.14.x"
|
"hydrooj": "^2.17.22"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"js-yaml": "^4.0.0",
|
|
||||||
"mongodb": "^3.6.4"
|
"mongodb": "^3.6.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,11 @@
|
|||||||
/* eslint-disable no-await-in-loop */
|
/* eslint-disable no-await-in-loop */
|
||||||
// @ts-nocheck
|
|
||||||
import {
|
import {
|
||||||
Rdoc, TestCase, Mdoc, Drrdoc, TrainingNode,
|
Rdoc, TestCase, Mdoc, Drrdoc, TrainingNode,
|
||||||
} from 'hydrooj';
|
} from 'hydrooj';
|
||||||
import fs from 'fs';
|
import mongodb, { Db, Cursor } from 'mongodb';
|
||||||
import os from 'os';
|
|
||||||
import path from 'path';
|
|
||||||
import yaml from 'js-yaml';
|
|
||||||
import mongodb, { ObjectID, Db, Cursor } from 'mongodb';
|
|
||||||
|
|
||||||
const dst = global.Hydro.service.db;
|
const dst = global.Hydro.service.db;
|
||||||
const { file, discussion, document } = global.Hydro.model;
|
const { discussion, document } = global.Hydro.model;
|
||||||
const { testdataConfig } = global.Hydro.lib;
|
|
||||||
// TODO handle usage_userfile
|
|
||||||
// TODO output enhancement
|
// TODO output enhancement
|
||||||
const map = {};
|
const map = {};
|
||||||
|
|
||||||
@@ -337,22 +330,6 @@ async function fix(doc) {
|
|||||||
{ _id: doc._id },
|
{ _id: doc._id },
|
||||||
{ $set: { pid: doc.pid || doc.docId.toString(), content: addSpace(doc.content) } },
|
{ $set: { pid: doc.pid || doc.docId.toString(), content: addSpace(doc.content) } },
|
||||||
);
|
);
|
||||||
if (doc.data && doc.data instanceof ObjectID) {
|
|
||||||
const r = await file.get(doc.data);
|
|
||||||
const p = path.resolve(os.tmpdir(), 'hydro', `migrate.vijos.${doc._id}.zip`);
|
|
||||||
const w = fs.createWriteStream(p);
|
|
||||||
await new Promise((resolve, reject) => {
|
|
||||||
w.on('finish', resolve);
|
|
||||||
w.on('error', reject);
|
|
||||||
r.pipe(w);
|
|
||||||
});
|
|
||||||
const config = yaml.load(await testdataConfig.readConfig(p));
|
|
||||||
await dst.collection('document').updateOne(
|
|
||||||
{ _id: doc._id },
|
|
||||||
{ $set: { config } },
|
|
||||||
);
|
|
||||||
fs.unlinkSync(p);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fixProblem(report: Function) {
|
async function fixProblem(report: Function) {
|
||||||
@@ -421,24 +398,6 @@ async function removeInvalidPid(report: Function) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function userfileUsage(src: Db, report: Function) {
|
|
||||||
const count = await src.collection('domain.user').find().count();
|
|
||||||
await report({ progress: 1, message: `userfileUsage: ${count}` });
|
|
||||||
const total = Math.floor(count / 50);
|
|
||||||
for (let i = 0; i <= total; i++) {
|
|
||||||
const docs = await src.collection('domain.user')
|
|
||||||
.find().skip(i * 50).limit(50)
|
|
||||||
.toArray();
|
|
||||||
const t = [];
|
|
||||||
for (const doc of docs) {
|
|
||||||
if (doc.userfile_usage) {
|
|
||||||
t.push(dst.collection('user').updateOne({ _id: doc.uid }, { $set: { usage: doc.userfile_usage } }));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await Promise.all(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function task(name: any, src: Db, report: Function) {
|
async function task(name: any, src: Db, report: Function) {
|
||||||
const count = await cursor[name](src).count();
|
const count = await cursor[name](src).count();
|
||||||
await report({ progress: 1, message: `${name}: ${count}` });
|
await report({ progress: 1, message: `${name}: ${count}` });
|
||||||
@@ -550,8 +509,8 @@ export async function run({
|
|||||||
await fixProblem(report);
|
await fixProblem(report);
|
||||||
await discussionNode(src, report);
|
await discussionNode(src, report);
|
||||||
await message(src, report);
|
await message(src, report);
|
||||||
await userfileUsage(src, report);
|
|
||||||
await removeInvalidPid(report);
|
await removeInvalidPid(report);
|
||||||
|
await global.Hydro.model.system.set('db.ver', 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user