import { AppDataSource } from 'src/datasource'; import * as fs from 'fs/promises'; import { join } from 'path'; import { User } from 'src/modules/objects/user/user.entity'; import { OAuth2Client } from 'src/modules/objects/oauth2-client/oauth2-client.entity'; import { UserToken } from 'src/modules/objects/user-token/user-token.entity'; import { AuditLog } from 'src/modules/objects/audit/audit.entity'; import { Upload } from 'src/modules/objects/upload/upload.entity'; import { OAuth2ClientURL } from 'src/modules/objects/oauth2-client/oauth2-client-url.entity'; async function run() { await AppDataSource.initialize(); const dumpFile = await fs.readFile(join(__dirname, 'output.json'), { encoding: 'utf-8', }); const dump = JSON.parse(dumpFile); const userRepo = AppDataSource.getRepository(User); const uploadRepo = AppDataSource.getRepository(Upload); const oauth2Repo = AppDataSource.getRepository(OAuth2Client); const oauth2URLRepo = AppDataSource.getRepository(OAuth2ClientURL); const tokenRepo = AppDataSource.getRepository(UserToken); const auditRepo = AppDataSource.getRepository(AuditLog); const users: User[] = []; console.log('Saving users...'); for (const user of dump.users) { const newUser = new User(); Object.assign(newUser, user); await userRepo.save(newUser); users.push(newUser); } console.log('Saving user uploads...'); for (const user of dump.users.filter(({ picture }) => picture)) { const belonging = users.find(({ id }) => id === user.id); const newUpload = new Upload(); Object.assign(newUpload, user.picture); newUpload.uploader = belonging; await uploadRepo.save(newUpload); belonging.picture = newUpload; await userRepo.save(belonging); } console.log('Saving OAuth2 clients...'); for (const client of dump.clients) { const owner = users.find(({ id }) => id === client.ownerId); const newClient = new OAuth2Client(); Object.assign(newClient, client); newClient.owner = owner; await oauth2Repo.save(newClient); for (const url of client.urls || []) { const newURL = new OAuth2ClientURL(); Object.assign(newURL, url); newURL.client = newClient; await oauth2URLRepo.save(newURL); } } console.log('Saving tokens...'); for (const token of dump.totp) { const owner = users.find(({ id }) => id === token.userId); const newTOTP = new UserToken(); Object.assign(newTOTP, token); newTOTP.user = owner; await tokenRepo.save(newTOTP); } console.log('Saving audit logs...'); for (const audit of dump.auditLogs) { const owner = users.find(({ id }) => id === audit.actorId); const newAudit = new AuditLog(); Object.assign(newAudit, audit); newAudit.actor = owner; await auditRepo.save(newAudit); } } run() .catch(console.error) .then(() => process.exit(0));