services:
  # =====================================
  # Core Infrastructure Services
  # =====================================
  
  postgres:
    image: postgres:15
    container_name: pipeline_postgres
    environment:
      POSTGRES_USER: pipeline_admin
      POSTGRES_PASSWORD: secure_pipeline_2024
      POSTGRES_DB: dev_pipeline
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./databases/scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
    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_secure_2024
    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_admin
      MONGO_INITDB_ROOT_PASSWORD: mongo_secure_2024
    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: rabbit_secure_2024
    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
      - migration_state:/tmp  # Persistent volume for migration state
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - NODE_ENV=development
      - DATABASE_URL=postgresql://pipeline_admin:secure_pipeline_2024@postgres:5432/dev_pipeline
      - ALLOW_DESTRUCTIVE_MIGRATIONS=false  # Safety flag for destructive operations
    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
      - CORS_ORIGINS=http://localhost:3001
      - CORS_METHODS=GET,POST,PUT,DELETE,PATCH,OPTIONS  # Add this line
      - CORS_CREDENTIALS=true  # Add this line
      # Database connections
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=secure_pipeline_2024
      # Cache and message queue
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - RABBITMQ_HOST=rabbitmq
      - RABBITMQ_PORT=5672
      - RABBITMQ_USER=pipeline_admin
      - RABBITMQ_PASSWORD=rabbit_secure_2024
      # JWT configuration
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-secure_pipeline_2024
      - JWT_SECRET=ultra_secure_jwt_secret_2024
      # - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-secure_pipeline_2024
      # - JWT_REFRESH_SECRET=refresh-secret-key-2024-tech4biz-secure_pipeline_2024
      # 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
      - AI_MOCKUP_URL=http://ai-mockup-service:8021
      - UNISON_URL=http://unison:8010
      - TEMPLATE_MANAGER_AI_URL=http://template-manager:8013
    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=secure_pipeline_2024
      - DATABASE_URL=postgresql://pipeline_admin:secure_pipeline_2024@postgres:5432/dev_pipeline
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - 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_secure_2024@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=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - CLAUDE_API_KEY=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
    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=secure_pipeline_2024
      - 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=secure_pipeline_2024
      - MONGODB_HOST=mongodb
      - MONGODB_PORT=27017
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - 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=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
    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=secure_pipeline_2024
      - MONGODB_HOST=mongodb
      - MONGODB_PORT=27017
      - RABBITMQ_HOST=rabbitmq
      - RABBITMQ_PORT=5672
      - RABBITMQ_USER=pipeline_admin
      - RABBITMQ_PASSWORD=rabbit_secure_2024
    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:
      - FRONTEND_URL=http://localhost:3001
      - 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=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-secure_pipeline_2024
      - JWT_REFRESH_SECRET=refresh-secret-key-2024-tech4biz-secure_pipeline_2024
      - JWT_ACCESS_EXPIRY=24h
      - JWT_ADMIN_ACCESS_EXPIRY=7d
      - JWT_REFRESH_EXPIRY=7d
      # Email Configuration
      - SMTP_HOST=smtp.gmail.com
      - SMTP_PORT=587
      - SMTP_SECURE=false
      - SMTP_USER=frontendtechbiz@gmail.com
      - SMTP_PASS=oidhhjeasgzbqptq
      - SMTP_FROM=frontendtechbiz@gmail.com
      - GMAIL_USER=frontendtechbiz@gmail.com
      - GMAIL_APP_PASSWORD=oidhhjeasgzbqptq
      - AUTH_PUBLIC_URL=*
      - 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", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1: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=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - NODE_ENV=development
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-secure_pipeline_2024
      - CLAUDE_API_KEY=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
      - TEMPLATE_MANAGER_AI_URL=http://127.0.0.1:8013
      - NEO4J_URI=bolt://neo4j:7687
      - NEO4J_USERNAME=neo4j
      - NEO4J_PASSWORD=password
      - PYTHONUNBUFFERED=1
    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

  unison:
    build: ./services/unison
    container_name: pipeline_unison
    environment:
      - PORT=8010
      - HOST=0.0.0.0
      - TECH_STACK_SELECTOR_URL=http://tech-stack-selector:8002
      - TEMPLATE_MANAGER_URL=http://template-manager:8009
      - TEMPLATE_MANAGER_AI_URL=http://template-manager:8013
      - CLAUDE_API_KEY=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
      - LOG_LEVEL=info
    networks:
      - pipeline_network
    depends_on:
      tech-stack-selector:
        condition: service_started
      template-manager:
        condition: service_started

  # AI Mockup / Wireframe Generation Service
  ai-mockup-service:
    build: ./services/ai-mockup-service
    container_name: pipeline_ai_mockup_service
    ports:
      - "8021:8021"
    environment:
      - PORT=8021
      - HOST=0.0.0.0
      - CLAUDE_API_KEY=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
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - JWT_ACCESS_SECRET=access-secret-key-2024-tech4biz-secure_pipeline_2024
      - USER_AUTH_SERVICE_URL=http://user-auth:8011
      - FLASK_ENV=development
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      user-auth:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8021/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  git-integration:
    build: ./services/git-integration
    container_name: pipeline_git_integration
    ports:
      - "8012:8012"
    environment:
      - PORT=8012
      - HOST=0.0.0.0
      - FRONTEND_URL=http://localhost:3001
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - POSTGRES_DB=dev_pipeline
      - POSTGRES_USER=pipeline_admin
      - POSTGRES_PASSWORD=secure_pipeline_2024
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=redis_secure_2024
      - NODE_ENV=development
      - GITHUB_CLIENT_ID=Ov23liQgF14aogXVZNCR
      - GITHUB_CLIENT_SECRET=8bf82a29154fdccb837bc150539a2226d00b5da5
      - GITHUB_REDIRECT_URI=http://localhost:8012/api/github/auth/github/callback
      - ATTACHED_REPOS_DIR=/app/git-repos
      - SESSION_SECRET=git-integration-secret-key-2024
    volumes:
      - /home/tech4biz/Desktop/Projectsnew/CODENUK1/git-repos:/app/git-repos
    networks:
      - pipeline_network
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "node", "-e", "require('http').get('http://127.0.0.1:8012/health', (res) => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
      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:secure_pipeline_2024@postgres:5432/dev_pipeline
      - CLAUDE_API_KEY=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
      - REDIS_URL=redis://:redis_secure_2024@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:secure_pipeline_2024@postgres:5432/dev_pipeline
      - REDIS_URL=redis://:redis_secure_2024@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=admin
      - N8N_BASIC_AUTH_PASSWORD=admin_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=dev_pipeline
      - DB_POSTGRESDB_USER=pipeline_admin
      - DB_POSTGRESDB_PASSWORD=secure_pipeline_2024
    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
  migration_state:
    driver: local

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

