62 lines
1.6 KiB
JavaScript
Raw Normal View History

import { config } from 'dotenv';
import fse from 'fs-extra';
import { join } from 'path';
import ora from 'ora';
import { PrismaClient } from '@prisma/client';
import DTF from '@eartharoid/dtf';
config();
const dtf = new DTF('en-GB');
let spinner = ora('Connecting').start();
fse.ensureDirSync(join(process.cwd(), './user/dumps'));
const file_path = join(process.cwd(), './user/dumps', `${dtf.fill('YYYY-MM-DD-HH-mm-ss')}-db.json`);
const prisma_options = {};
if (process.env.DB_PROVIDER === 'sqlite' && !process.env.DB_CONNECTION_URL) {
prisma_options.datasources = { db: { url: 'file:' + join(process.cwd(), './user/database.db') } };
}
const prisma = new PrismaClient(prisma_options);
if (process.env.DB_PROVIDER === 'sqlite') {
const { default: sqliteMiddleware } = await import('../src/lib/middleware/prisma-sqlite.js');
prisma.$use(sqliteMiddleware);
await prisma.$queryRaw`PRAGMA journal_mode=WAL;`;
await prisma.$queryRaw`PRAGMA synchronous=normal;`;
}
spinner.succeed('Connected');
2025-02-13 04:19:57 +00:00
const models = [
'user',
'guild',
'tag',
'category',
'question',
'ticket',
'feedback',
'questionAnswer',
'archivedChannel',
'archivedRole',
'archivedUser',
'archivedMessage',
];
const dump = await Promise.all(
models.map(async model => {
spinner = ora(`Exporting ${model}`).start();
const data = await prisma[model].findMany();
spinner.succeed(`Exported ${data.length} from ${model}`);
return [model, data];
}),
);
spinner = ora('Writing').start();
await fse.promises.writeFile(file_path, JSON.stringify(dump));
spinner.succeed(`Written to "${file_path}"`);
process.exit(0);