FROM node:22-slim AS frontend
RUN corepack enable pnpm
WORKDIR /app/web
COPY web/package.json ./
RUN pnpm config set registry https://registry.npmmirror.com && pnpm install
COPY web/ ./
RUN pnpm run build

FROM node:22-slim AS production
RUN corepack enable pnpm
WORKDIR /app

# Switch to Aliyun mirror for faster apt downloads in China
RUN sed -i \
    -e 's|http://deb.debian.org|http://mirrors.aliyun.com|g' \
    -e 's|http://security.debian.org|http://mirrors.aliyun.com|g' \
    /etc/apt/sources.list.d/debian.sources

# Build tools needed to compile better-sqlite3 native addon
RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*

COPY server/package.json ./server/
WORKDIR /app/server
# hoisted mode: flat node_modules so native addons (better-sqlite3) can locate their .node files
# pnpm v10 blocks build scripts by default; onlyBuiltDependencies allows better-sqlite3 to compile,
# and explicit rebuild ensures the native addon is built even if install skipped it.
RUN echo "node-linker=hoisted" > .npmrc && \
    pnpm config set registry https://registry.npmmirror.com && \
    pnpm install --prod && \
    pnpm rebuild better-sqlite3

COPY server/ ./
RUN mkdir -p data
COPY --from=frontend /app/web/dist /app/web/dist

EXPOSE 3456

CMD ["pnpm", "exec", "tsx", "src/index.ts"]
