# ========== 阶段一：前端构建（国内 npm 源） ==========
FROM node:20-alpine AS frontend

# 使用国内 npm 镜像（npmmirror）
COPY docker/.npmrc /root/.npmrc
WORKDIR /app

COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci --prefer-offline --no-audit

COPY frontend/ ./
RUN npm run build

# ========== 阶段二：后端构建（国内 Maven 源） ==========
FROM maven:3.9-eclipse-temurin-8-alpine AS backend

COPY docker/maven-settings.xml /root/.m2/settings.xml
WORKDIR /build

# 先复制 pom，利用层缓存
COPY backend/pom.xml ./
RUN mvn dependency:go-offline -B -q

# 复制后端源码
COPY backend/src ./src

# 将前端打包结果放入 Spring Boot 静态资源目录
COPY --from=frontend /app/dist ./src/main/resources/static

RUN mvn package -DskipTests -B -q

# ========== 阶段三：运行（单容器，仅 Java） ==========
FROM eclipse-temurin:8-jre-alpine

RUN apk add --no-cache libgcc tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

WORKDIR /app

COPY --from=backend /build/target/*.jar app.jar

ENV DATA_DIR=/app/data
RUN mkdir -p ${DATA_DIR}/upload-temp

EXPOSE 48080

ENTRYPOINT ["java", "-jar", "app.jar"]
