# Build context = app/ (monorepo root): docker build -f apps/api/Dockerfile .
# bookworm-slim over alpine: argon2 native prebuilds are safest on glibc.
FROM node:22-bookworm-slim AS build
RUN corepack enable
WORKDIR /repo
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json turbo.json tsconfig.base.json ./
COPY packages ./packages
COPY apps/api ./apps/api
RUN pnpm install --frozen-lockfile --filter @alven/api... --filter .
RUN pnpm --filter @alven/shared build && pnpm --filter @alven/api build
RUN pnpm --filter @alven/api --prod deploy --legacy /out

# One-shot migration runner for the local/self-hosted stack (docker-compose.local.yml):
# reuses the build stage (drizzle-kit + SQL migrations present) so the runtime image stays slim.
FROM build AS migrate
CMD ["pnpm", "--filter", "@alven/api", "db:migrate"]

FROM node:22-bookworm-slim AS runtime
ENV NODE_ENV=production
WORKDIR /app
COPY --from=build /out ./
EXPOSE 3000
USER node
CMD ["node", "dist/main.js"]
