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
|
COPY --from=builder /app/next.config.mjs ./next.config.mjs
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
CMD ["npm", "run", "start"]
|
CMD ["npm", "run", "start:deploy"]
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"build": "prisma generate && next build",
|
"build": "prisma generate && next build",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
|
"start:deploy": "prisma db push && tsx prisma/seed-if-empty.ts && next start",
|
||||||
"lint": "next lint",
|
"lint": "next lint",
|
||||||
"db:generate": "prisma generate",
|
"db:generate": "prisma generate",
|
||||||
"db:migrate": "prisma migrate dev",
|
"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