diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-05-04 16:27:03 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-05-04 16:27:03 +0900 |
| commit | b5acf15877908a4b0e60324c1371aad623b5529d (patch) | |
| tree | 0f1145a784e046bf6c1df40e0ff905deeafd23fb /migration | |
| parent | ドライブのファイルにユーザー情報を非正規化 (diff) | |
| download | sharkey-b5acf15877908a4b0e60324c1371aad623b5529d.tar.gz sharkey-b5acf15877908a4b0e60324c1371aad623b5529d.tar.bz2 sharkey-b5acf15877908a4b0e60324c1371aad623b5529d.zip | |
2.0.0
Diffstat (limited to 'migration')
| -rw-r--r-- | migration/2.0.0.js | 57 | ||||
| -rw-r--r-- | migration/2018-04-19.js | 49 |
2 files changed, 57 insertions, 49 deletions
diff --git a/migration/2.0.0.js b/migration/2.0.0.js new file mode 100644 index 0000000000..eb8f5730c7 --- /dev/null +++ b/migration/2.0.0.js @@ -0,0 +1,57 @@ +// for Node.js interpret + +const chalk = require('chalk'); +const sequential = require('promise-sequential'); + +const { default: User } = require('../built/models/user'); +const { default: DriveFile } = require('../built/models/drive-file'); + +async function main() { + const promiseGens = []; + + const count = await DriveFile.count({}); + + let prev; + + for (let i = 0; i < count; i++) { + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const file = await DriveFile.findOne(prev ? { + _id: { $gt: prev._id } + } : {}, { + sort: { + _id: 1 + } + }); + + prev = file; + + const user = await User.findOne({ _id: file.metadata.userId }); + + DriveFile.update({ + _id: file._id + }, { + $set: { + 'metadata._user': { + host: user.host + } + } + }).then(() => { + res([i, file]); + }).catch(rej); + }); + + promise.then(([i, file]) => { + console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`); + }); + + return promise; + }); + } + + return await sequential(promiseGens); +} + +main().then(() => { + console.log('ALL DONE'); +}).catch(console.error); diff --git a/migration/2018-04-19.js b/migration/2018-04-19.js deleted file mode 100644 index b0df22c009..0000000000 --- a/migration/2018-04-19.js +++ /dev/null @@ -1,49 +0,0 @@ -// for Node.js interpret - -const { default: User } = require('../built/models/user'); -const { default: Following } = require('../built/models/following'); -const { default: zip } = require('@prezzemolo/zip') - -const migrate = async (following) => { - const follower = await User.findOne({ _id: following.followerId }); - const followee = await User.findOne({ _id: following.followeeId }); - const result = await Following.update(following._id, { - $set: { - stalk: true, - _follower: { - host: follower.host, - inbox: follower.host != null ? follower.inbox : undefined - }, - _followee: { - host: followee.host, - inbox: followee.host != null ? followee.inbox : undefined - } - } - }); - return result.ok === 1; -} - -async function main() { - const count = await Following.count({}); - - const dop = Number.parseInt(process.argv[2]) || 5 - const idop = ((count - (count % dop)) / dop) + 1 - - return zip( - 1, - async (time) => { - console.log(`${time} / ${idop}`) - const doc = await Following.find({}, { - limit: dop, skip: time * dop - }) - return Promise.all(doc.map(migrate)) - }, - idop - ).then(a => { - const rv = [] - a.forEach(e => rv.push(...e)) - return rv - }) -} - -main().then(console.dir).catch(console.error) |