# میرور کامل و سازگار با ساختار registry.npmjs.org
# (mirror.iranserver.com/npm ناقص است و خیلی پکیج‌ها 404 می‌دهد)
ARG NPM_REGISTRY=https://registry.npmmirror.com

FROM node:22-alpine AS builder
ARG NPM_REGISTRY=https://registry.npmmirror.com
WORKDIR /app

ENV NPM_CONFIG_REGISTRY=${NPM_REGISTRY}

COPY package.json package-lock.json ./

# npm ci از URLهای resolved داخل lockfile استفاده می‌کند
RUN set -eux; \
  mirror="$(echo "${NPM_REGISTRY}" | sed 's:/*$::')"; \
  sed -i \
    -e "s|https://registry.npmjs.org|${mirror}|g" \
    -e "s|https://mirror.iranserver.com/npm|${mirror}|g" \
    package-lock.json; \
  npm config set registry "${mirror}"; \
  npm config set fetch-retries 5; \
  npm config set fetch-retry-mintimeout 20000; \
  npm config set fetch-retry-maxtimeout 120000; \
  echo "Using npm registry: ${mirror}"; \
  npm ci --no-audit --no-fund; \
  echo "npm ci done"

COPY prisma ./prisma
COPY prisma.config.ts ./
COPY tsconfig.json tsconfig.build.json nest-cli.json ./
COPY src ./src

RUN npx prisma generate \
  && npm run build \
  && npm prune --omit=dev \
  && npm install prisma ts-node typescript --no-save --no-audit --no-fund --registry=${NPM_REGISTRY}

FROM node:22-alpine AS runner
WORKDIR /app

ENV NODE_ENV=production

COPY --from=builder /app/package.json /app/package-lock.json ./
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/prisma.config.ts ./
COPY docker-entrypoint.sh ./

RUN chmod +x docker-entrypoint.sh

EXPOSE 3000

ENTRYPOINT ["./docker-entrypoint.sh"]
