Last active
May 28, 2024 11:27
-
-
Save rsaryev/65884be2d8992552e9a603fefabaecb3 to your computer and use it in GitHub Desktop.
Prisma analogue migrate rest command only programmatically, for testing purposes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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