# syntax=docker/dockerfile:1

# ---------------------------------------------------------------------------
# Base: pnpm-enabled Node image
# ---------------------------------------------------------------------------
FROM node:22-bookworm-slim AS base
ENV PNPM_HOME=/pnpm
ENV PATH=$PNPM_HOME:$PATH
RUN corepack enable
WORKDIR /app

# ---------------------------------------------------------------------------
# Dependencies + build
# ---------------------------------------------------------------------------
FROM base AS build
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json .npmrc ./
COPY tsconfig.base.json tsconfig.json ./
COPY packages ./packages
COPY apps ./apps
COPY tests ./tests
COPY configs ./configs
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
RUN pnpm db:generate
RUN pnpm build

# Strip dev dependencies from the built tree.
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile --prod

# ---------------------------------------------------------------------------
# Runtime base
# ---------------------------------------------------------------------------
FROM base AS runtime
ENV NODE_ENV=production
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package.json ./package.json
COPY --from=build /app/pnpm-workspace.yaml ./pnpm-workspace.yaml
COPY --from=build /app/packages ./packages
COPY --from=build /app/apps ./apps
# Bank profile seeds. Without these a fresh container boots with zero bank
# profiles and every statement falls back to the generic rules.
COPY --from=build /app/configs ./configs
USER node

# ---------------------------------------------------------------------------
# API
# ---------------------------------------------------------------------------
FROM runtime AS api
EXPOSE 3000
CMD ["node", "apps/api/dist/main.js"]

# ---------------------------------------------------------------------------
# Worker
# ---------------------------------------------------------------------------
FROM runtime AS worker
CMD ["node", "apps/worker/dist/main.js"]
