# ================================
# Stage 1: сборка Vue
# ================================
FROM node:20-alpine AS frontend

WORKDIR /app

COPY frontend/package*.json ./
RUN npm ci

COPY frontend/ ./
RUN npm run build

# ================================
# Stage 2: сборка Go
# ================================
FROM golang:1.25-alpine AS backend

WORKDIR /app

# зависимости отдельно — используем кэш слоёв
COPY backend/go.mod backend/go.sum ./
RUN go mod download

# исходники
COPY backend/ ./

# встраиваем собранную статику Vue
COPY --from=frontend /app/dist ./src/api/dist

# сборка бинарника
RUN CGO_ENABLED=0 GOOS=linux go build -o server ./src/

# ================================
# Stage 3: финальный образ
# ================================
FROM alpine:3.19

# нужен для корректной работы TLS и временных зон
RUN apk add --no-cache ca-certificates tzdata

WORKDIR /app

COPY --from=backend /app/server ./server

EXPOSE 8080

ENTRYPOINT ["./server"]