Migration

This commit is contained in:
Timo Knuth
2026-04-03 00:31:20 +02:00
parent 97a6cc11f7
commit fe00bede47
6 changed files with 36 additions and 17 deletions

9
.gitignore vendored
View File

@@ -38,10 +38,11 @@ next-env.d.ts
# prisma # prisma
# /prisma/migrations/ # Now tracked in Git for deployment # /prisma/migrations/ # Now tracked in Git for deployment
# docker # docker
docker-compose.override.yml docker-compose.override.yml
*.sql *.sql
/backups/ !prisma/migrations/**/*.sql
/backups/
# logs # logs
logs logs

View File

@@ -51,14 +51,17 @@ ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public COPY --from=builder /app/public ./public
COPY --from=builder /app/docker/entrypoint.sh ./docker/entrypoint.sh
USER nextjs
RUN chmod +x ./docker/entrypoint.sh
EXPOSE 3000
USER nextjs
CMD ["node", "server.js"]
EXPOSE 3000
CMD ["./docker/entrypoint.sh"]

8
docker/entrypoint.sh Normal file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
set -eu
echo "Applying Prisma migrations..."
npx prisma migrate deploy
echo "Starting application..."
exec node server.js

View File

@@ -0,0 +1,4 @@
-- AlterTable
ALTER TABLE "User"
ADD COLUMN "activationNudgeSentAt" TIMESTAMP(3),
ADD COLUMN "upgradeNudgeSentAt" TIMESTAMP(3);

View File

@@ -0,0 +1,3 @@
-- AlterTable
ALTER TABLE "User"
ADD COLUMN "thirtyDayNudgeSentAt" TIMESTAMP(3);

View File

@@ -78,7 +78,7 @@ export async function GET(request: NextRequest) {
} }
// Day-30: signed up > 30 days ago, has ≥1 QR code, still FREE, hasn't received this email yet // Day-30: signed up > 30 days ago, has ≥1 QR code, still FREE, hasn't received this email yet
const thirtyDayCandidates = await (db.user as any).findMany({ const thirtyDayCandidates = await db.user.findMany({
where: { where: {
createdAt: { lt: thirtyDaysAgo }, createdAt: { lt: thirtyDaysAgo },
thirtyDayNudgeSentAt: null, thirtyDayNudgeSentAt: null,
@@ -93,7 +93,7 @@ export async function GET(request: NextRequest) {
if (user._count.qrCodes > 0 && user.email) { if (user._count.qrCodes > 0 && user.email) {
try { try {
await sendThirtyDayNudgeEmail(user.email, user.name ?? 'there', user._count.qrCodes); await sendThirtyDayNudgeEmail(user.email, user.name ?? 'there', user._count.qrCodes);
await (db.user as any).update({ await db.user.update({
where: { id: user.id }, where: { id: user.id },
data: { thirtyDayNudgeSentAt: now }, data: { thirtyDayNudgeSentAt: now },
}); });