# Image Docker de l'API, construite en deux étapes (« multi-stage build »).

# --- Étape 1 : compilation avec un JDK complet ---
FROM eclipse-temurin:25-jdk AS build
WORKDIR /app

# D'abord le wrapper Maven et le pom seuls : tant qu'ils ne changent pas, Docker
# réutilise la couche des dépendances téléchargées (build suivant bien plus rapide).
COPY mvnw pom.xml ./
COPY .mvn .mvn
# chmod : au cas où le bit exécutable de mvnw aurait été perdu (archive zip, Windows...)
RUN chmod +x mvnw && ./mvnw -B dependency:go-offline

# Puis le code source, et construction du jar exécutable (les tests tournent en CI, pas ici).
COPY src src
RUN ./mvnw -B package -DskipTests

# --- Étape 2 : exécution avec un simple JRE (image plus petite, sans compilateur) ---
FROM eclipse-temurin:25-jre
WORKDIR /app

# Utilisateur sans privilèges : si l'appli est compromise, l'attaquant n'est pas root.
RUN groupadd --system spring && useradd --system --gid spring spring

# On ne récupère que le jar de l'étape 1 (target/*.jar exclut le .jar.original).
COPY --from=build /app/target/*.jar app.jar

USER spring

# Active application-prod.properties (PostgreSQL). Les variables SPRING_DATASOURCE_URL,
# SPRING_DATASOURCE_USERNAME et SPRING_DATASOURCE_PASSWORD sont à fournir au lancement.
ENV SPRING_PROFILES_ACTIVE=prod

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