# Stage 1: Build NestJS Application
FROM node:20-alpine AS builder

WORKDIR /app

# Copy package files
COPY package*.json ./

# Install dependencies (development packages are required for nesting build)
RUN npm ci

# Copy prisma schema & configuration first to generate the Prisma client
COPY prisma ./prisma/
COPY prisma.config.ts tsconfig.json ./
RUN npx prisma generate

# Copy the rest of the source files
COPY . .

# Build NestJS bundle
RUN npm run build

# Stage 2: Production Run
FROM node:20-alpine AS runner

WORKDIR /app

# Copy package files
COPY package*.json ./

# Install production-only dependencies
RUN npm ci --only=production

# Copy generated Prisma Client and built application from stage 1
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/node_modules/@prisma/client ./node_modules/@prisma/client

# Expose port
EXPOSE 3001

ENV PORT=3001
ENV NODE_ENV=production

# CMD to start the production application (ensures database schema is pushed first)
CMD ["sh", "-c", "npx prisma db push && npm run start:prod"]

