server:
  port: 8080

spring:
  application:
    name: xdz-gateway
  
  # 允许 Bean 覆盖（解决 loadBalancerClientFactory 冲突）
  main:
    allow-bean-definition-overriding: true

  # 环境配置
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:dev}  # 通过环境变量 SPRING_PROFILES_ACTIVE 切换，可选值：local, dev, prod，默认 dev

  config:
    import:
      - optional:classpath:application-${spring.profiles.active}.yaml # 根据 active 加载对应的配置文件

  # Gateway 配置
  cloud:
    gateway:
      # 路由配置
      routes:
        # ========== v1 版本路由（新规范）==========
        # 管理后台 - v1 - 会员服务
        - id: admin-v1-member-service
          uri: http://localhost:18080
          predicates:
            - Path=/api/v1/admin/member/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/member/...

        # 管理后台 - v1 - 车辆服务
        - id: admin-v1-vehicle-service
          uri: http://localhost:18083
          predicates:
            - Path=/api/v1/admin/vehicle/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/vehicle/...

        # 管理后台 - v1 - 服务管理（通过业务服务代理）
        - id: admin-v1-service-management
          uri: http://localhost:18081
          predicates:
            - Path=/api/v1/admin/service/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/service/...

        # 管理后台 - v1 - 权限服务（角色）- 转发到 user-server
        # 注意：此路由必须在系统服务路由之前，确保更具体的路径优先匹配
        - id: admin-v1-role-service
          uri: http://localhost:18080
          predicates:
            - Path=/api/v1/admin/system/role/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/role/...
          order: -1  # 设置更小的数字，确保在系统服务路由（order: 0）之前匹配

        # 管理后台 - v1 - 权限服务（菜单）- 转发到 user-server
        - id: admin-v1-menu-service
          uri: http://localhost:18080
          predicates:
            - Path=/api/v1/admin/system/menu/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/menu/...
          order: -1  # 设置更小的数字，确保在系统服务路由（order: 0）之前匹配

        # 管理后台 - v1 - 权限服务（权限）- 转发到 user-server
        - id: admin-v1-permission-service
          uri: http://localhost:18080
          predicates:
            - Path=/api/v1/admin/system/permission/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/permission/...
          order: -1  # 设置更小的数字，确保在系统服务路由（order: 0）之前匹配

        # 管理后台 - v1 - 系统服务（其他系统接口）
        - id: admin-v1-system-service
          uri: http://localhost:18081
          predicates:
            - Path=/api/v1/admin/system/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/...
          order: 0  # 默认优先级，低于权限服务路由

        # 管理后台 - v1 - 默认路由
        - id: admin-v1-default-service
          uri: http://localhost:18081
          predicates:
            - Path=/api/v1/admin/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/...

        # APP端 - v1 - 会员服务
        - id: app-v1-member-service
          uri: http://localhost:18080
          predicates:
            - Path=/api/v1/app/member/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /app/member/...

        # APP端 - v1 - 社区服务
        - id: app-v1-community-service
          uri: http://localhost:18081
          predicates:
            - Path=/api/v1/app/community/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /app/community/...

        # APP端 - v1 - 默认路由
        - id: app-v1-default-service
          uri: http://localhost:18081
          predicates:
            - Path=/api/v1/app/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /app/...

        # ========== 前端开发服务器路由 ==========
        # 前端页面和静态资源（所有非 API 请求）
        - id: frontend-dev-server
          uri: http://localhost:8082
          predicates:
            - Path=/**
          filters:
            - StripPrefix=0  # 不删除前缀，直接转发
          # 优先级：最低，放在最后，确保 API 路由优先匹配
          order: 9999

      # 全局 CORS 配置
      globalcors:
        cors-configurations:
          '[/**]':
            # 注意：当 allowCredentials=true 时，不能使用 "*"，必须明确列出允许的源
            # 或者使用 allowedOriginPatterns 支持通配符
            allowedOriginPatterns: 
              - "http://localhost:*"  # 支持所有 localhost 端口
              - "http://127.0.0.1:*"  # 支持所有 127.0.0.1 端口
            allowedMethods: 
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
              - PATCH
            allowedHeaders: "*"
            exposedHeaders: 
              - Authorization
              - Content-Type
            allowCredentials: true
            maxAge: 3600  # 预检请求缓存时间（秒）

    # Nacos 配置（本地开发可禁用）
    nacos:
      discovery:
        enabled: false  # 本地开发禁用服务发现
      config:
        enabled: false  # 本地开发禁用配置中心

# OAuth2 JWT 配置（用于 Gateway Token 验证）
xdz:
  # API 访问日志配置
  access-log:
    enable: true # 是否启用 API 访问日志
    mode: log-only # 存储模式：log-only（默认，只记录日志文件）| direct（直接写数据库）

  security:
    oauth2-jwt:
      enabled: true
      # Gateway 只需要公钥验证 Token，不需要私钥
      public-key-path: classpath:jwt/oauth2_jwt_public_key.pem
      expire-time: 7200

# Gateway 配置
gateway:
  # 公开接口路径列表（支持 Ant 路径模式）
  # 使用通配符模式简化配置，按模块分组管理
  public-endpoints:
    # ========== Admin 端公开接口 ==========
    # Admin 端认证相关接口
    - /api/v1/admin/system/auth/**
    # Admin 端验证码接口
    - /api/v1/admin/system/captcha/**
    # Admin 端租户接口
    - /api/v1/admin/system/tenant/**
    # Admin 端文件接口
    - /api/v1/admin/system/file/**
    # Admin 端 OAuth2 接口
    - /api/v1/admin/system/oauth2/**
    # Admin 端短信回调接口
    - /api/v1/admin/system/sms/callback/**
    
    # ========== APP 端公开接口 ==========
    # APP 端认证相关接口
    - /api/v1/app/member/auth/**
    # APP 端用户重置密码接口
    - /api/v1/app/member/user/resetPassword
    # APP 端社交登录相关接口
    - /api/v1/app/member/social/**
    # APP 端签到配置接口
    - /api/v1/app/member/signInConfig/list
    # APP 端会员等级接口
    - /api/v1/app/member/level/list
    # APP 端租户接口
    - /api/v1/app/system/tenant/getByWebsite
    # APP 端地区接口
    - /api/v1/app/system/area/tree
    # APP 端文件接口
    - /api/v1/app/system/file/**
    # APP 端字典数据接口
    - /api/v1/app/system/dictData/list

# 日志配置
logging:
  level:
    org.springframework.cloud.gateway: DEBUG
    com.xindazhou.gateway: DEBUG

# Actuator 监控端点
management:
  endpoints:
    web:
      exposure:
        include: health,info,gateway

