# syntax=docker/dockerfile:1.7
# WeStore WMS API: multi-stage build for the pnpm monorepo.
# Build context: repository root.  docker build -f infra/docker/api.Dockerfile -t westore/wms-api .

FROM node:22-alpine AS base
RUN corepack enable && corepack prepare pnpm@10.28.0 --activate
WORKDIR /repo

FROM base AS deps
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY packages/shared/package.json packages/shared/
COPY apps/api/package.json apps/api/
RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile --filter @wms/api... 

FROM deps AS build
COPY packages/shared packages/shared
COPY apps/api apps/api
RUN pnpm --filter @wms/shared build && pnpm --filter @wms/api build
# Production node_modules only, flattened for the runtime image
RUN pnpm --filter @wms/api --prod deploy --legacy /out && cp -r apps/api/dist /out/dist && cp -r apps/api/drizzle /out/drizzle

FROM node:22-alpine AS runtime
ENV NODE_ENV=production PORT=3000
RUN apk add --no-cache tini && addgroup -S wms && adduser -S wms -G wms
WORKDIR /app
COPY --from=build --chown=wms:wms /out /app
USER wms
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s CMD wget -qO- http://127.0.0.1:3000/api/health || exit 1
ENTRYPOINT ["/sbin/tini", "--"]
# Migrations are run as a separate step/job: node dist/db/migrate.js
CMD ["node", "dist/main.js"]
