FROM node:20-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# Zbuilduje server (tsc -> dist) i web (vite -> dist/public)
RUN npm run build

FROM node:20-slim
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
EXPOSE 3000
COPY package*.json ./
RUN npm install --omit=dev
COPY --from=build /app/dist ./dist
# Skripty konektoru jsou obycejny JavaScript, nekompiluji se. Musi se ale
# dostat do image, jinak by konektory nemely zadnou vykonnou cast.
COPY --from=build /app/scripts ./scripts
# Migrace jsou .sql, ktere tsc do dist nekopiruje. Bez nich by se schema
# nevytvorilo, aplikace by spadla na migracich a jela dal v pameti - tedy presne
# to, co ma databaze resit. Cesta musi odpovidat dist/db/migrations, protoze
# odtud si je hleda src/db/migrate.ts.
COPY --from=build /app/src/db/migrations ./dist/db/migrations
CMD ["npm", "start"]
