# Les variables globales sont présentes dans le fichier .env
# - TAG
# - REGISTRY_URL
# - POSTGRES (user, password)
# - LOGGING_LEVEL_*

version: "3"

services:
  # Zookeeper basé sur la documentation officielle de Bitnami
  ## https://github.com/bitnami/containers/blob/main/bitnami/zookeeper/docker-compose.yml
  ## https://hub.docker.com/r/bitnami/zookeeper/
  zookeeper:
    image: docker.io/bitnami/zookeeper:3.9
    container_name: zookeeper
    ports:
      - "2181:2181"
    volumes:
      - "numecoeval_zookeeper_data:/bitnami"
    environment:
      ALLOW_ANONYMOUS_LOGIN: "yes"
  
  # Kafka basé sur la documentation officielle de Bitnami
  ## https://github.com/bitnami/containers/blob/main/bitnami/kafka/docker-compose.yml
  ## https://hub.docker.com/r/bitnami/kafka/
  kafka:
    image: docker.io/bitnami/kafka:3.6
    depends_on:
      - zookeeper
    container_name: kafka
    ports:
      - "9092:9092"
    volumes:
      - "numecoeval_kafka_data:/bitnami"
    environment:
      ALLOW_PLAINTEXT_LISTENER: "yes"
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"

  # Postgres basé sur la documentation officielle de Postgres sur Dockerhub
  ## https://hub.docker.com/_/postgres
  postgresdb:
    image: docker.io/postgres:15
    container_name: postgresdb
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: $POSTGRES_USER
      POSTGRES_PASSWORD: $POSTGRES_PASSWORD
    volumes:
      - "numecoeval_postgres_data:/var/lib/postgresql/data"

  api-rest-referentiels:
    image: ${REGISTRY_URL}/api-referentiel:${TAG}
    depends_on:
      - postgresdb
    ports:
      - "${PORT_PREFIX}8080:8080"
    environment:
      SERVER_PORT: "8080"
      MANAGEMENT_SERVER_PORT: "8080"
      SPRING_JPA_HIBERNATE_DDL-AUTO: "update"
      SPRING_DATASOURCE_URL: "jdbc:postgresql://postgresdb:5432/postgres?reWriteBatchedInserts=true"
      SPRING_DATASOURCE_USERNAME: $POSTGRES_USER
      SPRING_DATASOURCE_PASSWORD: $POSTGRES_PASSWORD
      SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE: "45MB"
      SPRING_SERVLET_MULTIPART_MAXFILESIZE: "10MB"
      SPRING_JPA_PROPERTIES_HIBERNATE_JDBC_BATCHSIZE: "1000"
      SPRING_JPA_PROPERTIES_HIBERNATE_ORDERINSERTS: "true"
      SPRING_JPA_SHOWSQL: "false"
      NUMECOEVAL_URLS_ALLOWED: "http://localhost,http://api-rest-referentiels"
      LOGGING_LEVEL_ROOT: $LOGGING_LEVEL_ROOT
      LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: $LOGGING_LEVEL_ORG_SPRINGFRAMEWORK

  api-rest-expositiondonneesentrees:
    image:  ${REGISTRY_URL}/api-expositiondonneesentrees:${TAG}
    depends_on:
      - postgresdb
      - api-rest-referentiels
    ports:
      - "${PORT_PREFIX}8081:8080"
    environment:
      SERVER_PORT: "8080"
      MANAGEMENT_SERVER_PORT: "8080"
      NUMECOEVAL_KAFKA_TOPIC_MAX_MESSAGES_SIZE: "52428800"
      NUMECOEVAL_REFERENTIEL_SERVER_URL: "http://api-rest-referentiels:8080"
      SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE: "45MB"
      SPRING_SERVLET_MULTIPART_MAXFILESIZE: "10MB"
      SPRING_DATASOURCE_URL: "jdbc:postgresql://postgresdb:5432/postgres?reWriteBatchedInserts=true"
      SPRING_DATASOURCE_USERNAME: $POSTGRES_USER
      SPRING_DATASOURCE_PASSWORD: $POSTGRES_PASSWORD
      SPRING_JPA_PROPERTIES_HIBERNATE_GENERATESTATISTICS: "true"
      SPRING_JPA_PROPERTIES_HIBERNATE_ORDERINSERTS: "true"
      SPRING_JPA_PROPERTIES_HIBERNATE_JDBC_BATCHSIZE: "1000"
      SPRING_JPA_SHOWSQL: "false"
      NUMECOEVAL_URLS_ALLOWED: "http://localhost,http://api-rest-expositiondonneesentrees"
      LOGGING_LEVEL_ROOT: $LOGGING_LEVEL_ROOT
      LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: $LOGGING_LEVEL_ORG_SPRINGFRAMEWORK

  api-event-donneesentrees:
    image: ${REGISTRY_URL}/api-event-donneesentrees:${TAG}
    depends_on:
      - kafka
      - postgresdb
      - api-rest-expositiondonneesentrees
    ports:
      - "${PORT_PREFIX}8083:8080"
    environment:
      SERVER_PORT: "8080"
      MANAGEMENT_SERVER_PORT: "8080"
      SPRING_KAFKA_BOOTSTRAPSERVERS: "kafka:9092"
      SPRING_DATASOURCE_URL: "jdbc:postgresql://postgresdb:5432/postgres?reWriteBatchedInserts=true"
      SPRING_DATASOURCE_USERNAME: $POSTGRES_USER
      SPRING_DATASOURCE_PASSWORD: $POSTGRES_PASSWORD
      LOGGING_LEVEL_ROOT: $LOGGING_LEVEL_ROOT
      LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: $LOGGING_LEVEL_ORG_SPRINGFRAMEWORK

  api-event-calculs:
    image: ${REGISTRY_URL}/api-event-calculs:${TAG}
    depends_on:
      - kafka
      - postgresdb
    ports:
      - "${PORT_PREFIX}8085:8080"
    environment:
      SERVER_PORT: "8080"
      MANAGEMENT_SERVER_PORT: "8080"
      NUMECOEVAL_URLS_ALLOWED: "http://localhost,http://api-event-calculs"
      NUMECOEVAL_REFERENTIELS_URL: "http://api-rest-referentiels:8080"
      SPRING_KAFKA_BOOTSTRAPSERVERS: "kafka:9092"
      SPRING_DATASOURCE_URL: "jdbc:postgresql://postgresdb:5432/postgres?reWriteBatchedInserts=true"
      SPRING_DATASOURCE_USERNAME: $POSTGRES_USER
      SPRING_DATASOURCE_PASSWORD: $POSTGRES_PASSWORD
      LOGGING_LEVEL_ROOT: $LOGGING_LEVEL_ROOT
      LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: $LOGGING_LEVEL_ORG_SPRINGFRAMEWORK

volumes:
  numecoeval_zookeeper_data:
    driver: local
  numecoeval_kafka_data:
    driver: local
  numecoeval_postgres_data:
    driver: local