# Full docker-compose: All services + infrastructure
# Use this to run the complete platform with all services in Docker

services:
  postgres:
    image: postgres:16-alpine
    container_name: goplt-postgres
    environment:
      POSTGRES_USER: goplt
      POSTGRES_PASSWORD: goplt_password
      POSTGRES_DB: goplt
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U goplt"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - goplt-network

  consul:
    image: consul:latest
    container_name: goplt-consul
    command: consul agent -dev -client=0.0.0.0
    ports:
      - "8500:8500"
    volumes:
      - consul_data:/consul/data
    healthcheck:
      test: ["CMD-SHELL", "consul members"]
      interval: 10s
      timeout: 3s
      retries: 5
    networks:
      - goplt-network

  auth-service:
    build:
      context: .
      dockerfile: cmd/auth-service/Dockerfile
    container_name: goplt-auth-service
    environment:
      ENVIRONMENT: production
      DATABASE_DSN: "postgres://goplt:goplt_password@postgres:5432/goplt?sslmode=disable"
      REGISTRY_TYPE: consul
      REGISTRY_CONSUL_ADDRESS: "consul:8500"
    ports:
      - "8081:8081"
    depends_on:
      postgres:
        condition: service_healthy
      consul:
        condition: service_healthy
    networks:
      - goplt-network
    restart: unless-stopped

  identity-service:
    build:
      context: .
      dockerfile: cmd/identity-service/Dockerfile
    container_name: goplt-identity-service
    environment:
      ENVIRONMENT: production
      DATABASE_DSN: "postgres://goplt:goplt_password@postgres:5432/goplt?sslmode=disable"
      REGISTRY_TYPE: consul
      REGISTRY_CONSUL_ADDRESS: "consul:8500"
    ports:
      - "8082:8082"
    depends_on:
      postgres:
        condition: service_healthy
      consul:
        condition: service_healthy
    networks:
      - goplt-network
    restart: unless-stopped

  authz-service:
    build:
      context: .
      dockerfile: cmd/authz-service/Dockerfile
    container_name: goplt-authz-service
    environment:
      ENVIRONMENT: production
      DATABASE_DSN: "postgres://goplt:goplt_password@postgres:5432/goplt?sslmode=disable"
      REGISTRY_TYPE: consul
      REGISTRY_CONSUL_ADDRESS: "consul:8500"
    ports:
      - "8083:8083"
    depends_on:
      postgres:
        condition: service_healthy
      consul:
        condition: service_healthy
    networks:
      - goplt-network
    restart: unless-stopped

  audit-service:
    build:
      context: .
      dockerfile: cmd/audit-service/Dockerfile
    container_name: goplt-audit-service
    environment:
      ENVIRONMENT: production
      DATABASE_DSN: "postgres://goplt:goplt_password@postgres:5432/goplt?sslmode=disable"
      REGISTRY_TYPE: consul
      REGISTRY_CONSUL_ADDRESS: "consul:8500"
    ports:
      - "8084:8084"
    depends_on:
      postgres:
        condition: service_healthy
      consul:
        condition: service_healthy
    networks:
      - goplt-network
    restart: unless-stopped

volumes:
  postgres_data:
    driver: local
  consul_data:
    driver: local

networks:
  goplt-network:
    driver: bridge
