FROM node:24-bookworm-slim AS build

ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"

RUN corepack enable && corepack prepare pnpm@11.5.2 --activate
RUN apt-get update && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY Backend/package.json Backend/pnpm-workspace.yaml ./Backend/
COPY UI/package.json UI/pnpm-workspace.yaml ./UI/

# Install in separate layers to keep peak memory low.
RUN cd Backend && pnpm install
RUN cd UI && pnpm install

COPY . .

# Build the frontend, then generate the Prisma client and compile the backend.
RUN cd UI && pnpm run build
RUN cd Backend && DATABASE_URL=postgresql://x:x@localhost/x pnpm run generate && pnpm run build

FROM node:24-bookworm-slim AS runtime

ENV NODE_ENV=production
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"

RUN corepack enable && corepack prepare pnpm@11.5.2 --activate
RUN apt-get update && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY Backend/package.json Backend/pnpm-workspace.yaml Backend/prisma.config.ts ./Backend/
COPY Backend/prisma ./Backend/prisma

RUN cd Backend && pnpm install --prod && DATABASE_URL=postgresql://x:x@localhost/x pnpm run generate

COPY --from=build /app/Backend/dist ./Backend/dist
COPY --from=build /app/UI/build ./UI/build

EXPOSE 5000

# Apply migrations on boot, then start the API (which also serves the UI build).
CMD ["sh", "-c", "cd /app/Backend && pnpm migrate:deploy && cd dist && node index.js"]
