services:
  # =====================================
  # Core Infrastructure Services
  # =====================================
  
  postgres:
    image: postgres:15
    container_name: pipeline_postgres
    environment:
      POSTGRES_USER: pipeline_admin
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: dev_pipeline
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - pipeline_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U pipeline_admin -d dev_pipeline"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s

  redis:
    image: redis:7-alpine
    container_name: pipeline_redis
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    ports:
      - "6379:6379"
    networks:
      - pipeline_network
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s

#   mongodb:
#     image: mongo:7
#     container_name: pipeline_mongodb
#     environment:
#       MONGO_INITDB_ROOT_USERNAME: pipeline_user
#       MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD}
#     volumes:
#       - mongodb_data:/data/db
#     ports:
#       - "27017:27017"
#     networks:
#       - pipeline_network

#   rabbitmq:
#     build:
#       context: ./infrastructure/rabbitmq
#       dockerfile: Dockerfile
#     image: automated-dev-pipeline-rabbitmq
#     container_name: pipeline_rabbitmq
#     environment:
#       RABBITMQ_DEFAULT_USER: pipeline_admin
#       RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
#     volumes:
#       - rabbitmq_data:/var/lib/rabbitmq
#       - rabbitmq_logs:/var/log/rabbitmq
#     ports:
#       - "5672:5672"
#       - "15672:15672"
#       - "15692:15692"
#     networks:
#       - pipeline_network
#     healthcheck:
#       test: ["CMD", "rabbitmq-diagnostics", "ping"]
#       interval: 30s
#       timeout: 10s
#       retries: 5
#       start_period: 60s

#   # =====================================
#   # Application Services
#   # =====================================
  
#   api-gateway:
#     build: ./services/api-gateway
#     container_name: pipeline_api_gateway
#     ports:
#       - "8000:8000"
#     environment:
#       - NODE_ENV=development
#       - PORT=8000
#       - REDIS_HOST=redis
#       - REDIS_PORT=6379
#       - REDIS_PASSWORD=${REDIS_PASSWORD}
#       - POSTGRES_HOST=postgres
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - RABBITMQ_HOST=rabbitmq
#       - RABBITMQ_PORT=5672
#       - RABBITMQ_USER=pipeline_admin
#       - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       redis:
#         condition: service_healthy
#       rabbitmq:
#         condition: service_healthy

#   requirement-processor:
#     build: ./services/requirement-processor
#     container_name: pipeline_requirement_processor
#     ports:
#       - "8001:8001"
#     environment:
#       - POSTGRES_HOST=postgres
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - REDIS_HOST=redis
#       - REDIS_PORT=6379
#       - REDIS_PASSWORD=${REDIS_PASSWORD}
#       - MONGODB_HOST=mongodb
#       - MONGODB_PORT=27017
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       redis:
#         condition: service_healthy
#       mongodb:
#         condition: service_started

#   tech-stack-selector:
#     build: ./services/tech-stack-selector
#     container_name: pipeline_tech_stack_selector
#     ports:
#       - "8002:8002"
#     environment:
#       - POSTGRES_HOST=postgres
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - REDIS_HOST=redis
#       - REDIS_PORT=6379
#       - REDIS_PASSWORD=${REDIS_PASSWORD}
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       redis:
#         condition: service_healthy

#   architecture-designer:
#     build: ./services/architecture-designer
#     container_name: pipeline_architecture_designer
#     ports:
#       - "8003:8003"
#     environment:
#       - POSTGRES_HOST=postgres
#       - HOST=0.0.0.0
#       - CLAUDE_API_KEY=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
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - MONGODB_HOST=mongodb
#       - MONGODB_PORT=27017
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       mongodb:
#         condition: service_started

#     healthcheck:
#       test: ["CMD", "curl", "-f", "http://localhost:8003/health"]
#       interval: 30s
#       timeout: 10s
#       retries: 3

#   code-generator:
#     build: ./services/code-generator
#     container_name: pipeline_code_generator
#     ports:
#       - "8004:8004"
#     environment:
#       - POSTGRES_HOST=postgres
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - MONGODB_HOST=mongodb
#       - MONGODB_PORT=27017
#       - REDIS_HOST=redis
#       - REDIS_PORT=6379
#       - REDIS_PASSWORD=${REDIS_PASSWORD}
#       - CLAUDE_API_KEY=${CLAUDE_API_KEY}
#       - OPENAI_API_KEY=${OPENAI_API_KEY}
#       - NEO4J_URI=bolt://neo4j:7687
#       - NEO4J_USER=neo4j
#       - NEO4J_PASSWORD=password
#       - CHROMA_HOST=chromadb
#       - CHROMA_PORT=8000
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       redis:
#         condition: service_healthy
#       mongodb:
#         condition: service_started
#       neo4j:
#       chromadb:  

#   test-generator:
#     build: ./services/test-generator
#     container_name: pipeline_test_generator
#     ports:
#       - "8005:8005"
#     environment:
#       - POSTGRES_HOST=postgres
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - REDIS_HOST=redis
#       - REDIS_PORT=6379
#       - REDIS_PASSWORD=${REDIS_PASSWORD}
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       redis:
#         condition: service_healthy

#   deployment-manager:
#     build: ./services/deployment-manager
#     container_name: pipeline_deployment_manager
#     ports:
#       - "8006:8006"
#     environment:
#       - POSTGRES_HOST=postgres
#       - POSTGRES_PORT=5432
#       - POSTGRES_DB=dev_pipeline
#       - POSTGRES_USER=pipeline_admin
#       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
#       - MONGODB_HOST=mongodb
#       - MONGODB_PORT=27017
#       - RABBITMQ_HOST=rabbitmq
#       - RABBITMQ_PORT=5672
#       - RABBITMQ_USER=pipeline_admin
#       - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       rabbitmq:
#         condition: service_healthy
#       mongodb:
#         condition: service_started

# # =====================================

#   # =====================================
#   # Workflow Orchestration
#   # =====================================
  
#   n8n:
#     image: n8nio/n8n:latest
#     container_name: pipeline_n8n
#     ports:
#       - "5678:5678"
#     environment:
#       - N8N_BASIC_AUTH_ACTIVE=true
#       - N8N_BASIC_AUTH_USER=pipeline_admin
#       - N8N_BASIC_AUTH_PASSWORD=pipeline_n8n_2024
#       - N8N_HOST=localhost
#       - N8N_PORT=5678
#       - N8N_PROTOCOL=http
#       - WEBHOOK_URL=http://localhost:5678
#       - GENERIC_TIMEZONE=UTC
#       - DB_TYPE=postgresdb
#       - DB_POSTGRESDB_HOST=postgres
#       - DB_POSTGRESDB_PORT=5432
#       - DB_POSTGRESDB_DATABASE=n8n
#       - DB_POSTGRESDB_USER=pipeline_admin
#       - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
#     volumes:
#       - n8n_data:/home/node/.n8n
#       - ./orchestration/n8n/workflows:/home/node/.n8n/workflows
#     networks:
#       - pipeline_network
#     depends_on:
#       postgres:
#         condition: service_healthy
#       redis:
#         condition: service_healthy
#       rabbitmq:
#         condition: service_healthy
#     healthcheck:
#       test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"]
#       interval: 30s
#       timeout: 10s
#       retries: 5
#       start_period: 60s
# # Volumes
# # =====================================
# volumes:
#   postgres_data:
#     driver: local
#   redis_data:
#     driver: local
#   mongodb_data:
#     driver: local
#   rabbitmq_data:
#     driver: local
#   rabbitmq_logs:
#     driver: local
#   n8n_data:
#     driver: local
#   neo4j_data:
#     driver: local
#   chromadb_data:
#     driver: local

# # =====================================
# # Networks
# # =====================================
# networks:
#   pipeline_network:
#     driver: bridge

# neo4j:
#     image: neo4j:5.15
#     environment:
#       - NEO4J_AUTH=neo4j/password
#     ports:
#       - "7474:7474"
#       - "7687:7687"
#     volumes:
#       - neo4j_data:/data
#     networks:
#       - pipeline_network

   
# chromadb:
#     image: chromadb/chroma:latest
#     ports:
#       - "8000:8000"
#     volumes:
#       - chromadb_data:/chroma/chroma
#     networks:
#       - pipeline_network

  # redis:
  #   image: redis:7-alpine
  #   container_name: pipeline_redis
  #   environment:
  #     REDIS_PASSWORD: redis123
  #     REDIS_USER: redisuser
  #   ports:
  #     - "6380:6379"
  #   volumes:
  #     - redis_data:/data
  #   command: redis-server --requirepass redis123
  #   healthcheck:
  #     test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
  #     interval: 30s
  #     timeout: 10s
  #     retries: 3
  #     start_period: 40s

  mongodb:
    image: mongo:7
    container_name: pipeline_mongodb
    environment:
      MONGO_INITDB_ROOT_USERNAME: pipeline_user
      MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD}
    volumes:
      - mongodb_data:/data/db
    ports:
      - "27017:27017"
    networks:
      - pipeline_network

  rabbitmq:
    build:
      context: ./infrastructure/rabbitmq
      dockerfile: Dockerfile
    image: automated-dev-pipeline-rabbitmq
    container_name: pipeline_rabbitmq
    environment:
      RABBITMQ_DEFAULT_USER: pipeline_admin
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
      - rabbitmq_logs:/var/log/rabbitmq
    ports:
      - "5673:5672"
      - "15672:15672"
      - "15692:15692"
    networks:
      - pipeline_network
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "ping"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s

  # =====================================
  # One-shot migrations runner (init job)
  # =====================================
  migrations:
    image: node:18
    container_name: pipeline_migrations
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - NODE_ENV=development
    entrypoint: ["/bin/sh", "-c", "chmod +x ./scripts/migrate-all.sh && ./scripts/migrate-all.sh"]
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    networks:
      - pipeline_network
    restart: "no"

  # =====================================
  # Enhanced Infrastructure for Code Generation
  # =====================================

  neo4j:
    image: neo4j:5.15
    container_name: pipeline_neo4j
    environment:
      - NEO4J_AUTH=neo4j/password
      - NEO4J_PLUGINS=["graph-data-science"]
      - NEO4J_dbms_security_procedures_unrestricted=gds.*,apoc.*
    ports:
      - "7474:7474"  # Neo4j Browser
      - "7687:7687"  # Bolt protocol
    volumes:
      - neo4j_data:/data
      - neo4j_logs:/logs
    networks:
      - pipeline_network
    healthcheck:
      test: ["CMD", "cypher-shell", "--username", "neo4j", "--password", "password", "MATCH () RETURN count(*) as count"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s

  # chromadb:
  #   image: chromadb/chroma:latest
  #   container_name: pipeline_chromadb
  #   ports:
  #     - "8010:8000"
  #   environment:
  #     - CHROMA_SERVER_HOST=0.0.0.0
  #     - CHROMA_SERVER_HTTP_PORT=8000
  #   volumes:
  #     - chromadb_data:/chroma/chroma
  #   networks:
  #     - pipeline_network
  #   healthcheck:
  #     test: ["CMD-SHELL", "curl -f http://localhost:8000/ || exit 1"]
  #     interval: 30s
  #     timeout: 10s
  #     retries: 5
  #     start_period: 60s
  
  # chromadb:
  #   image: chromadb/chroma:latest
  #   container_name: pipeline_chromadb
  #   ports:
  #     - "8010:8000"  # Changed port to avoid conflict with API Gateway
  #   environment:
  #     - CHROMA_SERVER_HOST=0.0.0.0
  #     - CHROMA_SERVER_HTTP_PORT=8000
  #   volumes:
  #     - chromadb_data:/chroma/chroma
  #   networks:
  #     - pipeline_network
  #   healthcheck:
  #     test: ["CMD", "curl", "-f", "http://localhost:8000/api/v2/heartbeat"]
  #     interval: 30s
  #     timeout: 10s
  #     retries: 5
  
  # chromadb:
  #   image: chromadb/chroma:latest
  #   container_name: pipeline_chromadb
  #   ports:
  #     - "8010:8000"
  #   environment:
  #     - CHROMA_SERVER_HOST=0.0.0.0
  #     - CHROMA_SERVER_HTTP_PORT=8000
  #     - IS_PERSISTENT=TRUE
  #     - PERSIST_DIRECTORY=/chroma/chroma
  #     - ANONYMIZED_TELEMETRY=TRUE
  #   volumes:
  #     - chromadb_data:/chroma/chroma
  #   networks:
  #     - pipeline_network
  #   healthcheck:
  #     test: ["CMD", "curl", "-f", "http://localhost:8000/api/v2/heartbeat"]
  #     interval: 30s
  #     timeout: 10s
  #     retries: 5
  #     start_period: 60s 

  chromadb:
    image: chromadb/chroma:latest
    container_name: pipeline_chromadb
    ports:
      - "8010:8000"
    environment:
      - CHROMA_SERVER_HOST=0.0.0.0
      - CHROMA_SERVER_HTTP_PORT=8000
      - IS_PERSISTENT=TRUE
      - PERSIST_DIRECTORY=/chroma/chroma
      - ANONYMIZED_TELEMETRY=TRUE
    volumes:
      - chromadb_data:/chroma/chroma
    networks:
      - pipeline_network
    healthcheck:
      test: ["CMD-SHELL", "timeout 5 bash -c '</dev/tcp/127.0.0.1/8000' || exit 1"]
      interval: 15s
      timeout: 10s
      retries: 3
      start_period: 30s



  # =====================================
  # Application Services
  # =====================================
  
  api-gateway:
    build: ./services/api-gateway
    container_name: pipeline_api_gateway
    ports:
      - "8000:8000"
    environment:
      - NODE_ENV=development
      - PORT=8000
      - HOST=0.0.0.0
      - FRONTEND_URL=http://localhost:3000
      # Database connections
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      # Cache and message queue
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - RABBITMQ_HOST=rabbitmq
      - RABBITMQ_PORT=5672
      - RABBITMQ_USER=pipeline_admin
      - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
      # JWT configuration
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-${POSTGRES_PASSWORD}
      - JWT_REFRESH_SECRET=refresh-secret-key-2024-tech4biz-${POSTGRES_PASSWORD}
      # Service URLs
      - USER_AUTH_URL=http://user-auth:8011
      - TEMPLATE_MANAGER_URL=http://template-manager:8009
      - GIT_INTEGRATION_URL=http://git-integration:8012
      - REQUIREMENT_PROCESSOR_URL=http://requirement-processor:8001
      - TECH_STACK_SELECTOR_URL=http://tech-stack-selector:8002
      - ARCHITECTURE_DESIGNER_URL=http://architecture-designer:8003
      - CODE_GENERATOR_URL=http://code-generator:8004
      - TEST_GENERATOR_URL=http://test-generator:8005
      - DEPLOYMENT_MANAGER_URL=http://deployment-manager:8006
      - DASHBOARD_URL=http://dashboard:8008
      - SELF_IMPROVING_GENERATOR_URL=http://self-improving-generator:8007
    volumes:
      - api_gateway_logs:/app/logs  # Add persistent volume for logs
    user: "node"  # Run as node user instead of root
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    restart: unless-stopped

  requirement-processor:
    build: ./services/requirement-processor
    container_name: pipeline_requirement_processor
    ports:
      - "8001:8001"
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - MONGODB_HOST=mongodb
      - MONGODB_PORT=27017
      - NEO4J_URI=bolt://neo4j:7687
      - NEO4J_USER=neo4j
      - NEO4J_PASSWORD=password
      - CHROMA_HOST=chromadb
      - CHROMA_PORT=8000
      - REDIS_URL=redis://redis:6379
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      mongodb:
        condition: service_started
      migrations:
        condition: service_completed_successfully

  tech-stack-selector:
    build: ./services/tech-stack-selector
    container_name: pipeline_tech_stack_selector
    ports:
      - "8002:8002"
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully

  architecture-designer:
    build: ./services/architecture-designer
    container_name: pipeline_architecture_designer
    ports:
      - "8003:8003"
    environment:
      - PORT=8003
      - HOST=0.0.0.0
      - CLAUDE_API_KEY=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
      - ANTHROPIC_API_KEY=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
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - MONGODB_HOST=mongodb
      - MONGODB_PORT=27017
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      mongodb:
        condition: service_started
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8003/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  code-generator:
    build: ./services/code-generator
    container_name: pipeline_code_generator
    ports:
      - "8004:8004"
    environment:
      - PORT=8004
      - HOST=0.0.0.0
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - MONGODB_HOST=mongodb
      - MONGODB_PORT=27017
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - CLAUDE_API_KEY=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
      - OPENAI_API_KEY=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
      # - NEO4J_URI=bolt://neo4j:7687
      # - NEO4J_USER=neo4j
      # - NEO4J_PASSWORD=password
      # - CHROMA_HOST=chromadb
      # - CHROMA_PORT=8000
    volumes:
    # NEW: Persistent volume for generated projects
    - ./generated-projects:/tmp/generated-projects
    # Optional: Also persist the generation logs/dashboards
    - ./generation-logs:/tmp/generation-logs  
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      mongodb:
        condition: service_started
      # neo4j:
      #   condition: service_healthy
      chromadb:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8004/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  test-generator:
    build: ./services/test-generator
    container_name: pipeline_test_generator
    ports:
      - "8005:8005"
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully

  deployment-manager:
    build: ./services/deployment-manager
    container_name: pipeline_deployment_manager
    ports:
      - "8006:8006"
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - MONGODB_HOST=mongodb
      - MONGODB_PORT=27017
      - RABBITMQ_HOST=rabbitmq
      - RABBITMQ_PORT=5672
      - RABBITMQ_USER=pipeline_admin
      - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
      mongodb:
        condition: service_started
      migrations:
        condition: service_completed_successfully

  user-auth:
    build: ./services/user-auth
    container_name: pipeline_user_auth
    ports:
      - "8011:8011"
    environment:
      - PORT=8011
      - HOST=0.0.0.0
      - NODE_ENV=development
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-${POSTGRES_PASSWORD}
      - JWT_REFRESH_SECRET=refresh-secret-key-2024-tech4biz-${POSTGRES_PASSWORD}
      - JWT_ACCESS_EXPIRY=15m
      - JWT_REFRESH_EXPIRY=7d
      - FRONTEND_URL=http://localhost:3000
      # Email Configuration
      - SMTP_HOST=${SMTP_HOST:-smtp.gmail.com}
      - SMTP_PORT=${SMTP_PORT:-587}
      - SMTP_SECURE=${SMTP_SECURE:-false}
      - SMTP_USER=${SMTP_USER:-frontendtechbiz@gmail.com}
      - SMTP_PASS=${SMTP_PASS:-oidhhjeasgzbqptq}
      - SMTP_FROM=${SMTP_FROM:-frontendtechbiz@gmail.com}
      - GMAIL_USER=${GMAIL_USER:-frontendtechbiz@gmail.com}
      - GMAIL_APP_PASSWORD=${GMAIL_APP_PASSWORD:-oidhhjeasgzbqptq}
      - AUTH_PUBLIC_URL=http://localhost:8011
      - TEMPLATE_MANAGER_URL=http://template-manager:8009
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8011/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    restart: unless-stopped  
  
  
  
  
  
  
  template-manager:
    build: ./services/template-manager
    container_name: pipeline_template_manager
    ports:
      - "8009:8009"
    environment:
      - PORT=8009
      - HOST=0.0.0.0
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - NODE_ENV=development
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-secure_pipeline_2024
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8009/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    restart: unless-stopped

  git-integration:
    build: ./services/git-integration
    container_name: pipeline_git_integration
    ports:
      - "8012:8012"
    env_file:
      - ./services/git-integration/.env
    environment:
      - PORT=8012
      - HOST=0.0.0.0
      - FRONTEND_URL=http://localhost:3000
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - NODE_ENV=development
      - GITHUB_REDIRECT_URI=http://localhost:8012/api/github/auth/github/callback
      - ATTACHED_REPOS_DIR=/tmp/attached-repos
      - SESSION_SECRET=git-integration-secret-key-2024
    volumes:
      - git_repos_data:/tmp/attached-repos
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8012/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    restart: unless-stopped

  self-improving-generator:
    build: ./self-improving-generator
    container_name: pipeline_self_improving_generator
    ports:
      - "8007:8007"
    environment:
      - PORT=8007
      - HOST=0.0.0.0
      - DATABASE_URL=postgresql://pipeline_admin:${POSTGRES_PASSWORD}@postgres:5432/dev_pipeline
      - CLAUDE_API_KEY=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
      - REDIS_URL=redis://pipeline_redis:6379
      - SERVICE_PORT=8007
      - LOG_LEVEL=INFO
      - DEFAULT_TARGET_QUALITY=0.85
      - MAX_ITERATIONS=5
      - ENABLE_LEARNING_SYSTEM=true
      - ENABLE_BACKGROUND_PROCESSING=true
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    volumes:
      - ./self-improving-generator:/app
      - /tmp/generated-projects:/tmp/generated-projects
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8007/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
  # =====================================
  # Workflow Orchestration
  # =====================================
  
  dashboard:
    build: ./dashboard-service
    container_name: pipeline_dashboard
    ports:
      - "8008:8008"
    environment:
      - NODE_ENV=production
      - PORT=8008
      - DATABASE_URL=postgresql://pipeline_admin:${POSTGRES_PASSWORD}@postgres:5432/dev_pipeline
      - REDIS_URL=redis://pipeline_redis:6379
      - API_GATEWAY_URL=http://pipeline_api_gateway:8000
      - CODE_GENERATOR_URL=http://pipeline_code_generator:8004
      - SELF_IMPROVING_URL=http://pipeline_self_improving_generator:8007
      - REQUIREMENT_PROCESSOR_URL=http://pipeline_requirement_processor:8001
      - TECH_STACK_SELECTOR_URL=http://pipeline_tech_stack_selector:8002
      - ARCHITECTURE_DESIGNER_URL=http://pipeline_architecture_designer:8003
      - TEST_GENERATOR_URL=http://pipeline_test_generator:8005
      - DEPLOYMENT_MANAGER_URL=http://pipeline_deployment_manager:8006
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      code-generator:
        condition: service_healthy
      self-improving-generator:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    volumes:
      
      - /tmp/generated-projects:/tmp/generated-projects:ro
      - ./dashboard-exports:/tmp/dashboard-exports
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8008/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
  n8n:
    image: n8nio/n8n:latest
    container_name: pipeline_n8n
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=pipeline_admin
      - N8N_BASIC_AUTH_PASSWORD=pipeline_n8n_2024
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - WEBHOOK_URL=http://localhost:5678
      - GENERIC_TIMEZONE=UTC
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=pipeline_admin
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - n8n_data:/home/node/.n8n
      - ./orchestration/n8n/workflows:/home/node/.n8n/workflows
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5678/healthz"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 60s

# =====================================
# Volumes
# =====================================
volumes:
  postgres_data:
    driver: local
  redis_data:
    driver: local
  mongodb_data:
    driver: local
  rabbitmq_data:
    driver: local
  rabbitmq_logs:
    driver: local
  git_repos_data:
    driver: local
  n8n_data:
    driver: local
  neo4j_data:
    driver: local
  neo4j_logs:
    driver: local
  chromadb_data:
    driver: local
  api_gateway_logs:
    driver: local

# =====================================
# Networks
# =====================================
networks:
  pipeline_network:
    driver: bridge
  # =====================================
  # Self-Improving Code Generator
  # =====================================
  
  
  # =====================================
  # Self-Improving Code Generator  
  # =====================================

