diff --git a/Dockerfile b/Dockerfile index 755316a..ddd3b28 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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"] diff --git a/package.json b/package.json index d7cee65..5617f30 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/prisma/seed-if-empty.ts b/prisma/seed-if-empty.ts new file mode 100644 index 0000000..c1aa603 --- /dev/null +++ b/prisma/seed-if-empty.ts @@ -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((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(); + });