mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-30 17:33:09 +02:00
Update migrate.ts
This commit is contained in:
parent
c07eaef2d1
commit
24cb3ba091
1 changed files with 51 additions and 5 deletions
|
@ -1,7 +1,10 @@
|
||||||
|
process.env.NODE_ENV = 'production';
|
||||||
|
|
||||||
import monk from 'monk';
|
import monk from 'monk';
|
||||||
import * as mongo from 'mongodb';
|
import * as mongo from 'mongodb';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as uuid from 'uuid';
|
import * as uuid from 'uuid';
|
||||||
|
import chalk from 'chalk';
|
||||||
import config from './config';
|
import config from './config';
|
||||||
import { initDb } from './db/postgre';
|
import { initDb } from './db/postgre';
|
||||||
import { User } from './models/entities/user';
|
import { User } from './models/entities/user';
|
||||||
|
@ -11,6 +14,7 @@ import { DriveFile } from './models/entities/drive-file';
|
||||||
import { DriveFolder } from './models/entities/drive-folder';
|
import { DriveFolder } from './models/entities/drive-folder';
|
||||||
import { InternalStorage } from './services/drive/internal-storage';
|
import { InternalStorage } from './services/drive/internal-storage';
|
||||||
import { createTemp } from './misc/create-temp';
|
import { createTemp } from './misc/create-temp';
|
||||||
|
import { Note } from './models/entities/note';
|
||||||
|
|
||||||
const u = (config as any).mongodb.user ? encodeURIComponent((config as any).mongodb.user) : null;
|
const u = (config as any).mongodb.user ? encodeURIComponent((config as any).mongodb.user) : null;
|
||||||
const p = (config as any).mongodb.pass ? encodeURIComponent((config as any).mongodb.pass) : null;
|
const p = (config as any).mongodb.pass ? encodeURIComponent((config as any).mongodb.pass) : null;
|
||||||
|
@ -38,6 +42,7 @@ const nativeDbConn = async (): Promise<mongo.Db> => {
|
||||||
const _User = db.get<any>('users');
|
const _User = db.get<any>('users');
|
||||||
const _DriveFile = db.get<any>('driveFiles.files');
|
const _DriveFile = db.get<any>('driveFiles.files');
|
||||||
const _DriveFolder = db.get<any>('driveFolders');
|
const _DriveFolder = db.get<any>('driveFolders');
|
||||||
|
const _Note = db.get<any>('notes');
|
||||||
const getDriveFileBucket = async (): Promise<mongo.GridFSBucket> => {
|
const getDriveFileBucket = async (): Promise<mongo.GridFSBucket> => {
|
||||||
const db = await nativeDbConn();
|
const db = await nativeDbConn();
|
||||||
const bucket = new mongo.GridFSBucket(db, {
|
const bucket = new mongo.GridFSBucket(db, {
|
||||||
|
@ -51,6 +56,7 @@ async function main() {
|
||||||
const Users = getRepository(User);
|
const Users = getRepository(User);
|
||||||
const DriveFiles = getRepository(DriveFile);
|
const DriveFiles = getRepository(DriveFile);
|
||||||
const DriveFolders = getRepository(DriveFolder);
|
const DriveFolders = getRepository(DriveFolder);
|
||||||
|
const Notes = getRepository(Note);
|
||||||
|
|
||||||
async function migrateDriveFile(file: any) {
|
async function migrateDriveFile(file: any) {
|
||||||
const user = await _User.findOne({
|
const user = await _User.findOne({
|
||||||
|
@ -128,12 +134,33 @@ async function main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function migrateNote(note: any) {
|
||||||
|
await Notes.insert({
|
||||||
|
id: note._id.toHexString(),
|
||||||
|
createdAt: note.createdAt || new Date(),
|
||||||
|
text: note.text,
|
||||||
|
cw: note.cw || null,
|
||||||
|
tags: note.tags || [],
|
||||||
|
userId: note.userId.toHexString(),
|
||||||
|
viaMobile: note.viaMobile || false,
|
||||||
|
geo: note.geo,
|
||||||
|
appId: null,
|
||||||
|
visibility: note.visibility || 'public',
|
||||||
|
visibleUserIds: note.visibleUserIds ? note.visibleUserIds.map((id: any) => id.toHexString()) : [],
|
||||||
|
replyId: note.replyId ? note.replyId.toHexString() : null,
|
||||||
|
renoteId: note.renoteId ? note.renoteId.toHexString() : null,
|
||||||
|
userHost: null,
|
||||||
|
fileIds: note.fileIds ? note.fileIds.map((id: any) => id.toHexString()) : [],
|
||||||
|
localOnly: note.localOnly || false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const allUsersCount = await _User.count();
|
const allUsersCount = await _User.count();
|
||||||
for (let i = 0; i < allUsersCount; i++) {
|
for (let i = 0; i < allUsersCount; i++) {
|
||||||
const user = await _User.findOne({}, {
|
const user = await _User.findOne({}, {
|
||||||
skip: i
|
skip: i
|
||||||
});
|
});
|
||||||
await Users.save({
|
await Users.insert({
|
||||||
id: user._id.toHexString(),
|
id: user._id.toHexString(),
|
||||||
createdAt: user.createdAt || new Date(),
|
createdAt: user.createdAt || new Date(),
|
||||||
username: user.username,
|
username: user.username,
|
||||||
|
@ -158,7 +185,7 @@ async function main() {
|
||||||
sharedInbox: user.sharedInbox,
|
sharedInbox: user.sharedInbox,
|
||||||
uri: user.uri,
|
uri: user.uri,
|
||||||
});
|
});
|
||||||
console.log(`USER (${i + 1}/${allUsersCount}) ${user._id} DONE`);
|
console.log(`USER (${i + 1}/${allUsersCount}) ${user._id} ${chalk.green('DONE')}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const allDriveFoldersCount = await _DriveFolder.count();
|
const allDriveFoldersCount = await _DriveFolder.count();
|
||||||
|
@ -172,7 +199,7 @@ async function main() {
|
||||||
name: folder.name,
|
name: folder.name,
|
||||||
parentId: folder.parentId,
|
parentId: folder.parentId,
|
||||||
});
|
});
|
||||||
console.log(`DRIVEFOLDER (${i + 1}/${allDriveFoldersCount}) ${folder._id} DONE`);
|
console.log(`DRIVEFOLDER (${i + 1}/${allDriveFoldersCount}) ${folder._id} ${chalk.green('DONE')}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const allDriveFilesCount = await _DriveFile.count();
|
const allDriveFilesCount = await _DriveFile.count();
|
||||||
|
@ -182,9 +209,28 @@ async function main() {
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
await migrateDriveFile(file);
|
await migrateDriveFile(file);
|
||||||
console.log(`DRIVEFILE (${i + 1}/${allDriveFilesCount}) ${file._id} DONE`);
|
console.log(`DRIVEFILE (${i + 1}/${allDriveFilesCount}) ${file._id} ${chalk.green('DONE')}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(`DRIVEFILE (${i + 1}/${allDriveFilesCount}) ${file._id} ERR`);
|
console.log(`DRIVEFILE (${i + 1}/${allDriveFilesCount}) ${file._id} ${chalk.red('ERR')}`);
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const allNotesCount = await _Note.count({
|
||||||
|
'_user.host': null
|
||||||
|
});
|
||||||
|
for (let i = 0; i < allNotesCount; i++) {
|
||||||
|
const note = await _Note.findOne({
|
||||||
|
'_user.host': null
|
||||||
|
}, {
|
||||||
|
skip: i
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await migrateNote(note);
|
||||||
|
console.log(`NOTE (${i + 1}/${allNotesCount}) ${note._id} ${chalk.green('DONE')}`);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`NOTE (${i + 1}/${allNotesCount}) ${note._id} ${chalk.red('ERR')}`);
|
||||||
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue