FROM node:20-alpine AS build
RUN npm install -g typescript@5
WORKDIR /app

COPY tsconfig.base.json ./
COPY prisma/ prisma/

# shared: 安装依赖 + prisma generate
COPY packages/shared/package.json packages/shared/tsconfig.json packages/shared/
RUN cd packages/shared && npm install && npx prisma generate --schema=../../prisma/schema.prisma

# server: 安装依赖（workspace:* → file: 引用）
COPY packages/server/package.json packages/server/tsconfig.json packages/server/
RUN cd packages/server && sed -i 's|"workspace:\*"|"file:../shared"|g' package.json && npm install

# 拷贝源码 + 编译
COPY packages/shared/src/ packages/shared/src/
COPY packages/server/src/ packages/server/src/

RUN tsc -p packages/shared/tsconfig.json
RUN tsc -p packages/server/tsconfig.json

# --- 精简运行时镜像 ---
FROM node:20-alpine AS runtime
RUN npm install -g prisma@6
WORKDIR /app

COPY --from=build /app/packages/shared/dist ./packages/shared/dist
COPY --from=build /app/packages/shared/package.json ./packages/shared/
COPY --from=build /app/packages/shared/node_modules ./packages/shared/node_modules
COPY --from=build /app/packages/server/dist ./packages/server/dist
COPY --from=build /app/packages/server/package.json ./packages/server/
COPY --from=build /app/packages/server/node_modules ./packages/server/node_modules
COPY --from=build /app/prisma ./prisma
COPY scripts/migrate-and-start.sh ./scripts/
RUN chmod +x scripts/migrate-and-start.sh

EXPOSE 3000
CMD ["sh", "scripts/migrate-and-start.sh"]
