server:
  port: 8180

spring:
  application:
    name: gateway-service
  
  # Gateway 必须使用 reactive 模式（WebFlux），不能使用 Spring MVC
  main:
    web-application-type: reactive
  
  # 配置中心
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
        namespace: dev
        group: DEFAULT_GROUP
      config:
        enabled: false  # 禁用Nacos配置中心，使用本地配置
        server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
        file-extension: yml
        namespace: dev
        group: DEFAULT_GROUP
    
    # Gateway 路由配置
    gateway:
      # 服务发现路由（自动路由）
      discovery:
        locator:
          enabled: false  # 关闭自动路由，使用手动配置
      
      # 手动配置路由
      routes:
        # ==================== 认证服务路由 ====================
        - id: auth-service
          uri: lb://auth-service
          predicates:
            - Path=/urban-lifeline/auth/**
          filters:
            - StripPrefix=1  # 去掉前缀：/urban-lifeline/auth/login → /auth/login
            - name: RequestRateLimiter
              args:
                redis-rate-limiter.replenishRate: 100
                redis-rate-limiter.burstCapacity: 200
        
        # ==================== 系统服务路由 ====================
        - id: system-service
          uri: lb://system-service
          predicates:
            - Path=/urban-lifeline/system/**
          filters:
            - StripPrefix=1
            
        # ==================== 日志服务路由 ====================
        - id: log-service
          uri: lb://log-service
          predicates:
            - Path=/urban-lifeline/log/**
          filters:
            - StripPrefix=1
        
        # ==================== 文件服务路由 ====================
        - id: file-service
          uri: lb://file-service
          predicates:
            - Path=/urban-lifeline/file/**
          filters:
            - StripPrefix=1
        
        # ==================== 消息服务路由 ====================
        - id: message-service
          uri: lb://message-service
          predicates:
            - Path=/urban-lifeline/message/**
          filters:
            - StripPrefix=1
        
        # ==================== 招投标服务路由 ====================
        - id: bidding-service
          uri: lb://bidding-service
          predicates:
            - Path=/urban-lifeline/bidding/**
          filters:
            - StripPrefix=1
        
        # ==================== 平台服务路由 ====================
        - id: platform-service
          uri: lb://platform-service
          predicates:
            - Path=/urban-lifeline/platform/**
          filters:
            - StripPrefix=1
        
        # ==================== 工单服务路由 ====================
        - id: workcase-service
          uri: lb://workcase-service
          predicates:
            - Path=/urban-lifeline/workcase/**
          filters:
            - StripPrefix=1
        
        # ==================== 定时任务服务路由 ====================
        - id: crontab-service
          uri: lb://crontab-service
          predicates:
            - Path=/urban-lifeline/crontab/**
          filters:
            - StripPrefix=1
        
        # ==================== AI 服务路由 ====================
        - id: ai-service
          uri: lb://ai-service
          predicates:
            - Path=/urban-lifeline/ai/**
          filters:
            - StripPrefix=1
      
      # 全局跨域配置
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOriginPatterns: "*"
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders: "*"
            allowCredentials: true
            maxAge: 3600
  datasource:
    # 按你的实际库名改一下，比如 urban-lifeline_system
    url: jdbc:postgresql://127.0.0.1:5432/urban_lifeline   # 换成你的 PG 库名
    username: postgres                                      # PG 用户
    password: postgres                                     # PG 密码
    driver-class-name: org.postgresql.Driver
  # Redis 配置（用于限流、缓存）
  data:
    redis:
      host: ${REDIS_HOST:localhost}
      port: ${REDIS_PORT:6379}
      password: 123456
      database: 0
      timeout: 5000ms
      lettuce:
        pool:
          max-active: 20
          max-wait: -1ms
          max-idle: 10
          min-idle: 5

# 认证配置
auth:
  enabled: true
  # gateway-mode 是给下游微服务用的，gateway本身不需要此配置
  token-header: Authorization
  token-prefix: "Bearer "
  # 认证接口白名单（login/logout/captcha/refresh）
  login-path: /urban-lifeline/auth/login
  logout-path: /urban-lifeline/auth/logout
  captcha-path: /urban-lifeline/auth/captcha
  refresh-path: /urban-lifeline/auth/refresh
  # 通用白名单（Swagger、健康检查等）
  whitelist:
    - /actuator/**
    - /v3/api-docs/**
    - /swagger-ui/**
    - /swagger-resources/**
    - /webjars/**
    - /doc.html
    - /favicon.ico
    - /error
security:
  aes:
    secret-key: MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=  # Base64 编码，32字节（256位）
# Actuator 监控端点
management:
  endpoints:
    web:
      exposure:
        include: health,info,gateway
  endpoint:
    health:
      show-details: always

# 日志配置（详细配置见 log4j2.xml）
logging:
  config: classpath:log4j2.xml
  charset:
    console: UTF-8
    file: UTF-8