FROM node:24-alpine AS dependencies
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci

FROM dependencies AS build
WORKDIR /app
COPY prisma ./prisma
COPY tsconfig.json vitest.config.ts ./
COPY src ./src
COPY telegram-referral ./telegram-referral
COPY tests ./tests
COPY public ./public
COPY scripts ./scripts
RUN npm run build

FROM node:24-alpine AS runtime-dependencies
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev --ignore-scripts
COPY --from=build /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=build /app/node_modules/@prisma/client ./node_modules/@prisma/client

FROM node:24-alpine AS runtime
ENV NODE_ENV=production
WORKDIR /app
COPY --from=runtime-dependencies /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
COPY --from=build /app/prisma ./prisma
COPY --from=build /app/public ./public
COPY --from=build /app/telegram-referral/web ./telegram-referral/web
COPY --from=build /app/telegram-referral/scripts ./telegram-referral/scripts
COPY --from=build /app/scripts ./scripts
COPY package.json package-lock.json ./
USER node
EXPOSE 3100
CMD ["node", "dist/src/server.js"]
