Skip to content

Instantly share code, notes, and snippets.

@rsaryev
Last active May 28, 2024 11:27
Show Gist options
  • Save rsaryev/65884be2d8992552e9a603fefabaecb3 to your computer and use it in GitHub Desktop.
Save rsaryev/65884be2d8992552e9a603fefabaecb3 to your computer and use it in GitHub Desktop.
Prisma analogue migrate rest command only programmatically, for testing purposes.
import { Prisma, PrismaClient } from '@prisma/client';
import { exec } from 'child_process';
import * as util from 'util';
const execPromisify = util.promisify(exec);
const prisma = new PrismaClient();
const tables = Prisma.dmmf.datamodel.models
.map((model) => model.dbName)
.filter((table) => table);
const clearMysql = async () => {
await prisma.$transaction([
prisma.$executeRaw`SET FOREIGN_KEY_CHECKS = 0;`,
...tables.map((table) =>
prisma.$executeRawUnsafe(`TRUNCATE ${table};`),
),
prisma.$executeRaw`SET FOREIGN_KEY_CHECKS = 1;`,
]);
};
const clearPostgres = async () => {
await prisma.$transaction([
...tables.map((table) =>
prisma.$executeRawUnsafe(`TRUNCATE ${table} CASCADE;`),
),
]);
};
const clearDefault = async () =>
execPromisify('npx prisma migrate reset --force --skip-seed');
export const clear = async (provider: string) => {
const executeClear = {
mysql: clearMysql,
postgres: clearPostgres,
};
const execute = executeClear[provider] || clearDefault;
return execute();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment