ARG NODE_IMAGE=node:20-alpine

FROM ${NODE_IMAGE} AS client-builder

WORKDIR /app/client

COPY client/package.json client/package-lock.json ./
RUN npm ci

COPY client/ ./
RUN npm run build


FROM ${NODE_IMAGE} AS server-deps

WORKDIR /app/server

COPY server/package.json server/package-lock.json ./
RUN npm ci --omit=dev


FROM ${NODE_IMAGE} AS runtime

WORKDIR /app

ENV NODE_ENV=production
ENV PORT=3000
ENV TZ=Asia/Shanghai

COPY --from=server-deps /app/server/node_modules ./server/node_modules
COPY server/ ./server/
COPY --from=client-builder /app/client/dist ./client/dist

RUN mkdir -p /app/server/data

EXPOSE 3000

CMD ["node", "server/index.js"]
