services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: payments
      POSTGRES_USER: payments
      POSTGRES_PASSWORD: ${PAYMENT_DB_PASSWORD:?Copy .env.example to .env}
    ports: ["127.0.0.1:5432:5432"]
    volumes: ["payment-data:/var/lib/postgresql/data"]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U payments -d payments"]
      interval: 3s
      timeout: 3s
      retries: 20
  identity:
    image: quay.io/keycloak/keycloak:26.7.3
    command: ["start-dev", "--import-realm"]
    environment:
      KC_BOOTSTRAP_ADMIN_USERNAME: localadmin
      KC_BOOTSTRAP_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:?Copy .env.example to .env}
    ports: ["127.0.0.1:9090:8080"]
    volumes: ["./scripts/local-realm.json:/opt/keycloak/data/import/payments-realm.json:ro"]
  app:
    build: .
    environment:
      DATABASE_URL: jdbc:postgresql://postgres:5432/payments
      DATABASE_USERNAME: payments
      DATABASE_PASSWORD: ${PAYMENT_DB_PASSWORD}
      JWT_ISSUER: http://localhost:9090/realms/payments
      JWT_JWK_SET_URI: http://identity:8080/realms/payments/protocol/openid-connect/certs
      REQUIRE_HTTPS: "false"
      OTEL_SDK_DISABLED: "true"
    ports: ["127.0.0.1:8080:8080"]
    depends_on:
      postgres: {condition: service_healthy}
      identity: {condition: service_started}
volumes:
  payment-data:
