From bba9c98c82676ef317ceb4f90776ade78b4e9133 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Fri, 8 May 2026 16:01:00 +0700 Subject: [PATCH] Apply Prisma migrations on startup --- Dockerfile | 4 +- prisma/migrations/1_init_schema/migration.sql | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 prisma/migrations/1_init_schema/migration.sql diff --git a/Dockerfile b/Dockerfile index 257b04d..74a3530 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,10 @@ FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production COPY package*.json ./ -RUN npm ci --omit=dev +RUN npm ci COPY --from=build /app/dist ./dist COPY --from=build /app/src/generated ./dist/generated COPY --from=build /app/prisma ./prisma COPY --from=build /app/prisma.config.ts ./prisma.config.ts EXPOSE 4000 -CMD ["npm", "run", "start"] +CMD ["sh", "-c", "npm run prisma:migrate:deploy && npm run start"] diff --git a/prisma/migrations/1_init_schema/migration.sql b/prisma/migrations/1_init_schema/migration.sql new file mode 100644 index 0000000..8723a41 --- /dev/null +++ b/prisma/migrations/1_init_schema/migration.sql @@ -0,0 +1,40 @@ +-- CreateSchema +CREATE SCHEMA IF NOT EXISTS "public"; + +-- CreateEnum +CREATE TYPE "VoiceExperienceStatus" AS ENUM ('UPLOADED', 'TRANSCRIBING', 'TRANSCRIBED', 'ANALYZING', 'ANALYZED', 'FAILED'); + +-- CreateTable +CREATE TABLE "Place" ( + "id" TEXT NOT NULL, + "googlePlaceId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "latitude" DOUBLE PRECISION NOT NULL, + "longitude" DOUBLE PRECISION NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Place_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "VoiceExperience" ( + "id" TEXT NOT NULL, + "placeId" TEXT NOT NULL, + "durationSeconds" INTEGER NOT NULL, + "audioObjectKey" TEXT NOT NULL, + "status" "VoiceExperienceStatus" NOT NULL DEFAULT 'UPLOADED', + "transcript" TEXT, + "analysis" JSONB, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "VoiceExperience_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Place_googlePlaceId_key" ON "Place"("googlePlaceId"); + +-- AddForeignKey +ALTER TABLE "VoiceExperience" ADD CONSTRAINT "VoiceExperience_placeId_fkey" FOREIGN KEY ("placeId") REFERENCES "Place"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +