services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: payments
      POSTGRES_USER: payments
      POSTGRES_PASSWORD: payments-local-only
    ports: ["5432:5432"]
    volumes: ["payment-data:/var/lib/postgresql/data"]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U payments -d payments"]
      interval: 2s
      timeout: 2s
      retries: 30
  keycloak:
    image: quay.io/keycloak/keycloak:26.0
    command: ["start-dev", "--import-realm"]
    environment:
      KC_BOOTSTRAP_ADMIN_USERNAME: admin
      KC_BOOTSTRAP_ADMIN_PASSWORD: admin-local-only
    ports: ["8081:8080"]
    volumes: ["./scripts/dev-realm.json:/opt/keycloak/data/import/payments.json:ro"]
  app:
    build: .
    ports: ["8080:8080"]
    environment:
      DB_URL: jdbc:postgresql://postgres:5432/payments?connectTimeout=3&socketTimeout=15
      DB_USER: payments
      DB_PASSWORD: payments-local-only
      REQUIRE_TLS: "false"
      JWT_ISSUER: http://localhost:8081/realms/payments
      JWT_JWKS_URI: http://keycloak:8080/realms/payments/protocol/openid-connect/certs
      SPRING_FLYWAY_LOCATIONS: classpath:db/migration,filesystem:/app/dev-migrations
    volumes: ["./src/dev/resources/db/migration:/app/dev-migrations:ro"]
    depends_on:
      postgres:
        condition: service_healthy
      keycloak:
        condition: service_started
volumes:
  payment-data:
