Update migrate.ts
This commit is contained in:
		
							parent
							
								
									e38335077e
								
							
						
					
					
						commit
						d18c835221
					
				
					 1 changed files with 131 additions and 34 deletions
				
			
		
							
								
								
									
										165
									
								
								src/migrate.ts
									
										
									
									
									
								
							
							
						
						
									
										165
									
								
								src/migrate.ts
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -15,6 +15,10 @@ import { DriveFolder } from './models/entities/drive-folder';
 | 
			
		|||
import { InternalStorage } from './services/drive/internal-storage';
 | 
			
		||||
import { createTemp } from './misc/create-temp';
 | 
			
		||||
import { Note } from './models/entities/note';
 | 
			
		||||
import { Following } from './models/entities/following';
 | 
			
		||||
import { genId } from './misc/gen-id';
 | 
			
		||||
import { Poll } from './models/entities/poll';
 | 
			
		||||
import { PollVote } from './models/entities/poll-vote';
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +47,8 @@ const _User = db.get<any>('users');
 | 
			
		|||
const _DriveFile = db.get<any>('driveFiles.files');
 | 
			
		||||
const _DriveFolder = db.get<any>('driveFolders');
 | 
			
		||||
const _Note = db.get<any>('notes');
 | 
			
		||||
const _Following = db.get<any>('following');
 | 
			
		||||
const _PollVote = db.get<any>('pollVotes');
 | 
			
		||||
const getDriveFileBucket = async (): Promise<mongo.GridFSBucket> => {
 | 
			
		||||
	const db = await nativeDbConn();
 | 
			
		||||
	const bucket = new mongo.GridFSBucket(db, {
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +63,63 @@ async function main() {
 | 
			
		|||
	const DriveFiles = getRepository(DriveFile);
 | 
			
		||||
	const DriveFolders = getRepository(DriveFolder);
 | 
			
		||||
	const Notes = getRepository(Note);
 | 
			
		||||
	const Followings = getRepository(Following);
 | 
			
		||||
	const Polls = getRepository(Poll);
 | 
			
		||||
	const PollVotes = getRepository(PollVote);
 | 
			
		||||
 | 
			
		||||
	async function migrateUser(user: any) {
 | 
			
		||||
		await Users.insert({
 | 
			
		||||
			id: user._id.toHexString(),
 | 
			
		||||
			createdAt: user.createdAt || new Date(),
 | 
			
		||||
			username: user.username,
 | 
			
		||||
			usernameLower: user.username.toLowerCase(),
 | 
			
		||||
			host: user.host,
 | 
			
		||||
			token: generateUserToken(),
 | 
			
		||||
			password: user.password,
 | 
			
		||||
			isAdmin: user.isAdmin,
 | 
			
		||||
			autoAcceptFollowed: true,
 | 
			
		||||
			autoWatch: false,
 | 
			
		||||
			name: user.name,
 | 
			
		||||
			location: user.profile ? user.profile.location : null,
 | 
			
		||||
			birthday: user.profile ? user.profile.birthday : null,
 | 
			
		||||
			followersCount: user.followersCount,
 | 
			
		||||
			followingCount: user.followingCount,
 | 
			
		||||
			notesCount: user.notesCount,
 | 
			
		||||
			description: user.description,
 | 
			
		||||
			isBot: user.isBot,
 | 
			
		||||
			isCat: user.isCat,
 | 
			
		||||
			isVerified: user.isVerified,
 | 
			
		||||
			inbox: user.inbox,
 | 
			
		||||
			sharedInbox: user.sharedInbox,
 | 
			
		||||
			uri: user.uri,
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async function migrateFollowing(following: any) {
 | 
			
		||||
		await Followings.save({
 | 
			
		||||
			id: following._id.toHexString(),
 | 
			
		||||
			createdAt: following.createdAt || new Date(),
 | 
			
		||||
			followerId: following.followerId.toHexString(),
 | 
			
		||||
			followeeId: following.followeeId.toHexString(),
 | 
			
		||||
 | 
			
		||||
			// 非正規化
 | 
			
		||||
			followerHost: following._follower ? following._follower.host : null,
 | 
			
		||||
			followerInbox: following._follower ? following._follower.inbox : null,
 | 
			
		||||
			followerSharedInbox: following._follower ? following._follower.sharedInbox : null,
 | 
			
		||||
			followeeHost: following._followee ? following._followee.host : null,
 | 
			
		||||
			followeeInbox: following._followee ? following._followee.inbox : null,
 | 
			
		||||
			followeeSharedInbox: following._followee ? following._followee.sharedInbo : nullx
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async function migrateDriveFolder(folder: any) {
 | 
			
		||||
		await DriveFolders.save({
 | 
			
		||||
			id: folder._id.toHexString(),
 | 
			
		||||
			createdAt: folder.createdAt || new Date(),
 | 
			
		||||
			name: folder.name,
 | 
			
		||||
			parentId: folder.parentId ? folder.parentId.toHexString() : null,
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async function migrateDriveFile(file: any) {
 | 
			
		||||
		const user = await _User.findOne({
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +139,7 @@ async function main() {
 | 
			
		|||
				url: file.metadata.url,
 | 
			
		||||
				uri: file.metadata.uri,
 | 
			
		||||
				accessKey: file.metadata.storage.key,
 | 
			
		||||
				folderId: file.metadata.folderId,
 | 
			
		||||
				folderId: file.metadata.folderId ? file.metadata.folderId.toHexString() : null,
 | 
			
		||||
				storedInternal: false,
 | 
			
		||||
				isRemote: false
 | 
			
		||||
			});
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +214,32 @@ async function main() {
 | 
			
		|||
			renoteId: note.renoteId ? note.renoteId.toHexString() : null,
 | 
			
		||||
			userHost: null,
 | 
			
		||||
			fileIds: note.fileIds ? note.fileIds.map((id: any) => id.toHexString()) : [],
 | 
			
		||||
			localOnly: note.localOnly || false
 | 
			
		||||
			localOnly: note.localOnly || false,
 | 
			
		||||
			hasPoll: note.poll != null
 | 
			
		||||
		});
 | 
			
		||||
 | 
			
		||||
		if (note.poll) {
 | 
			
		||||
			await Polls.save({
 | 
			
		||||
				id: genId(),
 | 
			
		||||
				noteId: note._id.toHexString(),
 | 
			
		||||
				choices: note.poll.choices.map((x: any) => x.text),
 | 
			
		||||
				expiresAt: note.poll.expiresAt,
 | 
			
		||||
				multiple: note.poll.multiple,
 | 
			
		||||
				votes: note.poll.choices.map((x: any) => x.votes),
 | 
			
		||||
				noteVisibility: note.visibility,
 | 
			
		||||
				userId: note.userId.toHexString(),
 | 
			
		||||
				userHost: null
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	async function migratePollVote(vote: any) {
 | 
			
		||||
		await PollVotes.save({
 | 
			
		||||
			id: vote._id.toHexString(),
 | 
			
		||||
			createdAt: vote.createdAt,
 | 
			
		||||
			noteId: vote.note.id.toHexString(),
 | 
			
		||||
			userId: vote.user.id.toHexString(),
 | 
			
		||||
			choice: vote.choice
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -160,32 +248,27 @@ async function main() {
 | 
			
		|||
		const user = await _User.findOne({}, {
 | 
			
		||||
			skip: i
 | 
			
		||||
		});
 | 
			
		||||
		await Users.insert({
 | 
			
		||||
			id: user._id.toHexString(),
 | 
			
		||||
			createdAt: user.createdAt || new Date(),
 | 
			
		||||
			username: user.username,
 | 
			
		||||
			usernameLower: user.username.toLowerCase(),
 | 
			
		||||
			host: user.host,
 | 
			
		||||
			token: generateUserToken(),
 | 
			
		||||
			password: user.password,
 | 
			
		||||
			isAdmin: user.isAdmin,
 | 
			
		||||
			autoAcceptFollowed: true,
 | 
			
		||||
			autoWatch: false,
 | 
			
		||||
			name: user.name,
 | 
			
		||||
			location: user.profile ? user.profile.location : null,
 | 
			
		||||
			birthday: user.profile ? user.profile.birthday : null,
 | 
			
		||||
			followersCount: user.followersCount,
 | 
			
		||||
			followingCount: user.followingCount,
 | 
			
		||||
			notesCount: user.notesCount,
 | 
			
		||||
			description: user.description,
 | 
			
		||||
			isBot: user.isBot,
 | 
			
		||||
			isCat: user.isCat,
 | 
			
		||||
			isVerified: user.isVerified,
 | 
			
		||||
			inbox: user.inbox,
 | 
			
		||||
			sharedInbox: user.sharedInbox,
 | 
			
		||||
			uri: user.uri,
 | 
			
		||||
		try {
 | 
			
		||||
			await migrateUser(user);
 | 
			
		||||
			console.log(`USER (${i + 1}/${allUsersCount}) ${user._id} ${chalk.green('DONE')}`);
 | 
			
		||||
		} catch (e) {
 | 
			
		||||
			console.log(`USER (${i + 1}/${allUsersCount}) ${user._id} ${chalk.red('ERR')}`);
 | 
			
		||||
			console.error(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const allFollowingsCount = await _Following.count();
 | 
			
		||||
	for (let i = 0; i < allFollowingsCount; i++) {
 | 
			
		||||
		const following = await _Following.findOne({}, {
 | 
			
		||||
			skip: i
 | 
			
		||||
		});
 | 
			
		||||
		console.log(`USER (${i + 1}/${allUsersCount}) ${user._id} ${chalk.green('DONE')}`);
 | 
			
		||||
		try {
 | 
			
		||||
			await migrateFollowing(following);
 | 
			
		||||
			console.log(`FOLLOWING (${i + 1}/${allFollowingsCount}) ${following._id} ${chalk.green('DONE')}`);
 | 
			
		||||
		} catch (e) {
 | 
			
		||||
			console.log(`FOLLOWING (${i + 1}/${allFollowingsCount}) ${following._id} ${chalk.red('ERR')}`);
 | 
			
		||||
			console.error(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const allDriveFoldersCount = await _DriveFolder.count();
 | 
			
		||||
| 
						 | 
				
			
			@ -193,13 +276,13 @@ async function main() {
 | 
			
		|||
		const folder = await _DriveFolder.findOne({}, {
 | 
			
		||||
			skip: i
 | 
			
		||||
		});
 | 
			
		||||
		await DriveFolders.save({
 | 
			
		||||
			id: folder._id.toHexString(),
 | 
			
		||||
			createdAt: folder.createdAt || new Date(),
 | 
			
		||||
			name: folder.name,
 | 
			
		||||
			parentId: folder.parentId,
 | 
			
		||||
		});
 | 
			
		||||
		console.log(`DRIVEFOLDER (${i + 1}/${allDriveFoldersCount}) ${folder._id} ${chalk.green('DONE')}`);
 | 
			
		||||
		try {
 | 
			
		||||
			await migrateDriveFolder(folder);
 | 
			
		||||
			console.log(`DRIVEFOLDER (${i + 1}/${allDriveFoldersCount}) ${folder._id} ${chalk.green('DONE')}`);
 | 
			
		||||
		} catch (e) {
 | 
			
		||||
			console.log(`DRIVEFOLDER (${i + 1}/${allDriveFoldersCount}) ${folder._id} ${chalk.red('ERR')}`);
 | 
			
		||||
			console.error(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const allDriveFilesCount = await _DriveFile.count();
 | 
			
		||||
| 
						 | 
				
			
			@ -233,6 +316,20 @@ async function main() {
 | 
			
		|||
			console.error(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const allPollVotesCount = await _PollVote.count();
 | 
			
		||||
	for (let i = 0; i < allPollVotesCount; i++) {
 | 
			
		||||
		const vote = await _PollVote.findOne({}, {
 | 
			
		||||
			skip: i
 | 
			
		||||
		});
 | 
			
		||||
		try {
 | 
			
		||||
			await migratePollVote(vote);
 | 
			
		||||
			console.log(`POLLVOTE (${i + 1}/${allPollVotesCount}) ${vote._id} ${chalk.green('DONE')}`);
 | 
			
		||||
		} catch (e) {
 | 
			
		||||
			console.log(`POLLVOTE (${i + 1}/${allPollVotesCount}) ${vote._id} ${chalk.red('ERR')}`);
 | 
			
		||||
			console.error(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue