# سوق المدينة — Dockerfile لخدمة الـ API (Node.js + TypeScript + Prisma)
# بناء متعدد المراحل: مرحلة بناء تحتوي أدوات التطوير، ومرحلة تشغيل نهائية خفيفة

# ---------- مرحلة البناء ----------
FROM node:20-alpine AS build
WORKDIR /app

# طبقة تبعيات منفصلة للاستفادة من الكاش بين عمليات البناء المتكررة
COPY package.json package-lock.json* ./
RUN npm install

COPY prisma ./prisma
RUN npx prisma generate

COPY tsconfig.json ./
COPY src ./src
RUN npm run build

# ---------- مرحلة التشغيل ----------
FROM node:20-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production

COPY package.json package-lock.json* ./
RUN npm install --omit=dev \
    && npm cache clean --force

COPY --from=build /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=build /app/node_modules/@prisma ./node_modules/@prisma
COPY --from=build /app/dist ./dist
COPY --from=build /app/prisma ./prisma

# مجلد الصور المرفوعة — يُركَّب عليه volume مشترك مع Nginx في docker-compose.yml
RUN mkdir -p /app/uploads

EXPOSE 4000

# عند الإقلاع: طبّق أي migrations معلّقة على قاعدة البيانات ثم شغّل السيرفر.
# هذا يجعل النشر بسيطاً (docker compose up) بدون خطوة يدوية منفصلة لتطبيق الـ migrations.
CMD ["sh", "-c", "npx prisma migrate deploy && node dist/index.js"]
