Add deploy startup seed guard
This commit is contained in:
+1
-1
@@ -25,4 +25,4 @@ COPY --from=builder /app/prisma ./prisma
|
||||
COPY --from=builder /app/next.config.mjs ./next.config.mjs
|
||||
|
||||
EXPOSE 3000
|
||||
CMD ["npm", "run", "start"]
|
||||
CMD ["npm", "run", "start:deploy"]
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"dev": "next dev",
|
||||
"build": "prisma generate && next build",
|
||||
"start": "next start",
|
||||
"start:deploy": "prisma db push && tsx prisma/seed-if-empty.ts && next start",
|
||||
"lint": "next lint",
|
||||
"db:generate": "prisma generate",
|
||||
"db:migrate": "prisma migrate dev",
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { spawn } from "node:child_process";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function runSeed() {
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
const child = spawn("npx", ["tsx", "prisma/seed.ts"], {
|
||||
stdio: "inherit",
|
||||
shell: true
|
||||
});
|
||||
child.on("exit", (code) => {
|
||||
if (code === 0) resolve();
|
||||
else reject(new Error(`Seed failed with exit code ${code}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const [plans, users, ads] = await Promise.all([
|
||||
prisma.plan.count(),
|
||||
prisma.user.count(),
|
||||
prisma.ad.count()
|
||||
]);
|
||||
|
||||
if (plans > 0 && users > 0 && ads > 0) {
|
||||
console.log("✅ Database already seeded. Skipping demo seed.");
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("🌱 Empty database detected. Running demo seed...");
|
||||
await runSeed();
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
Reference in New Issue
Block a user