mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: testdata(zip-> multi files)
This commit is contained in:
1 parent
c30fbe1e6b
commit
e7794090b2
17 files changed
+338
-335
No files matched your search
@@ -1,9 +1,17 @@
|
||||
/* eslint-disable no-await-in-loop */
|
||||
import { ObjectID, Collection } from 'mongodb';
|
||||
import { terminal } from 'terminal-kit';
|
||||
import { Ufdoc } from './interface';
|
||||
import { Logger } from './logger';
|
||||
import gridfs from './service/gridfs';
|
||||
import storage from './service/storage';
|
||||
import db from './service/db';
|
||||
import * as problem from './model/problem';
|
||||
import * as domain from './model/domain';
|
||||
import * as document from './model/document';
|
||||
import db from './service/db';
|
||||
|
||||
type UpgradeScript = () => Promise<void>;
|
||||
const logger = new Logger('upgrade');
|
||||
type UpgradeScript = () => Promise<boolean | void>;
|
||||
|
||||
const scripts: UpgradeScript[] = [
|
||||
// Init
|
||||
@@ -11,6 +19,7 @@ const scripts: UpgradeScript[] = [
|
||||
const ddoc = await domain.get('system');
|
||||
if (!ddoc) await domain.add('system', 0, 'Hydro', 'Hydro System');
|
||||
// TODO discussion node?
|
||||
return true;
|
||||
},
|
||||
// Add history column to ddoc,drdoc,psdoc
|
||||
async function _1_2() {
|
||||
@@ -29,9 +38,68 @@ const scripts: UpgradeScript[] = [
|
||||
});
|
||||
if (bulk.length) await bulk.execute();
|
||||
}
|
||||
return true;
|
||||
},
|
||||
async function _2_3() {
|
||||
await db.collection('document').updateMany({ pid: /^\d+$/i }, { $unset: { pid: '' } });
|
||||
return true;
|
||||
},
|
||||
async function _3_4() {
|
||||
if (storage.error) {
|
||||
logger.error('Cannot upgrade. Please change storage config.');
|
||||
return false;
|
||||
}
|
||||
|
||||
const coll: Collection<Ufdoc> = db.collection('file');
|
||||
const collFile = db.collection('fs.files');
|
||||
const collChunk = db.collection('fs.chunks');
|
||||
function del(_id: ObjectID) {
|
||||
return Promise.all([
|
||||
coll.deleteOne({ _id }),
|
||||
collFile.deleteOne({ _id }),
|
||||
collChunk.deleteMany({ files_id: _id }),
|
||||
]);
|
||||
}
|
||||
async function get(_id: ObjectID, reject?: Function) {
|
||||
const stream = gridfs.openDownloadStream(_id);
|
||||
stream.on('error', (err) => {
|
||||
console.error(err);
|
||||
if (reject) reject(err);
|
||||
});
|
||||
return stream;
|
||||
}
|
||||
terminal.clear('Upgrade');
|
||||
logger.info('');
|
||||
// Problem file and User file
|
||||
// @ts-ignore
|
||||
const progress = terminal.progressBar({ title: 'Changing storage engine. This may take a long time.', y: 1 });
|
||||
const ddocs = await domain.getMulti().toArray();
|
||||
const totalProgress = terminal.progressBar({
|
||||
// @ts-ignore
|
||||
items: ddocs.length, title: 'Domain', y: 3, eta: true,
|
||||
});
|
||||
for (let i = 0; i < ddocs.length; i++) {
|
||||
const ddoc = ddocs[i];
|
||||
totalProgress.startItem(ddoc._id);
|
||||
const pdocs = await problem.getMulti(ddoc._id, { data: { $ne: null } }, ['docId', 'data', 'title']).toArray();
|
||||
// @ts-ignore
|
||||
const domainProgress = terminal.progressBar({
|
||||
// @ts-ignore
|
||||
items: pdocs.length, title: 'Problems', y: 4, eta: true,
|
||||
});
|
||||
for (let j = 0; j < pdocs.length; j++) {
|
||||
const pdoc = pdocs[j];
|
||||
domainProgress.startItem(`${pdoc.docId}: ${pdoc.title}`);
|
||||
// TODO copy file
|
||||
domainProgress.itemDone(`${pdoc.docId}: ${pdoc.title}`);
|
||||
}
|
||||
domainProgress.stop();
|
||||
totalProgress.itemDone(ddoc._id);
|
||||
}
|
||||
totalProgress.stop();
|
||||
// TODO userfile
|
||||
progress.stop();
|
||||
return false;
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in new issue
Block a user