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; +