feat(P1/P2): 完成TDD开发及P1/P2设计文档
## 设计文档 - multi_role_permission_design: 多角色权限设计 (CONDITIONAL GO) - audit_log_enhancement_design: 审计日志增强 (CONDITIONAL GO) - routing_strategy_template_design: 路由策略模板 (CONDITIONAL GO) - sso_saml_technical_research: SSO/SAML调研 (CONDITIONAL GO) - compliance_capability_package_design: 合规能力包设计 (CONDITIONAL GO) ## TDD开发成果 - IAM模块: supply-api/internal/iam/ (111个测试) - 审计日志模块: supply-api/internal/audit/ (40+测试) - 路由策略模块: gateway/internal/router/ (33+测试) - 合规能力包: gateway/internal/compliance/ + scripts/ci/compliance/ ## 规范文档 - parallel_agent_output_quality_standards: 并行Agent产出质量规范 - project_experience_summary: 项目经验总结 (v2) - 2026-04-02-p1-p2-tdd-execution-plan: TDD执行计划 ## 评审报告 - 5个CONDITIONAL GO设计文档评审报告 - fix_verification_report: 修复验证报告 - full_verification_report: 全面质量验证报告 - tdd_module_quality_verification: TDD模块质量验证 - tdd_execution_summary: TDD执行总结 依据: Superpowers执行框架 + TDD规范
This commit is contained in:
63
gateway/internal/router/engine/routing_engine.go
Normal file
63
gateway/internal/router/engine/routing_engine.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package engine
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"lijiaoqiao/gateway/internal/router/strategy"
|
||||
)
|
||||
|
||||
// ErrStrategyNotFound 策略未找到
|
||||
var ErrStrategyNotFound = errors.New("strategy not found")
|
||||
|
||||
// RoutingMetrics 路由指标接口
|
||||
type RoutingMetrics interface {
|
||||
// RecordSelection 记录路由选择
|
||||
RecordSelection(provider string, strategyName string, decision *strategy.RoutingDecision)
|
||||
}
|
||||
|
||||
// RoutingEngine 路由引擎
|
||||
type RoutingEngine struct {
|
||||
strategies map[string]strategy.StrategyTemplate
|
||||
metrics RoutingMetrics
|
||||
}
|
||||
|
||||
// NewRoutingEngine 创建路由引擎
|
||||
func NewRoutingEngine() *RoutingEngine {
|
||||
return &RoutingEngine{
|
||||
strategies: make(map[string]strategy.StrategyTemplate),
|
||||
metrics: nil,
|
||||
}
|
||||
}
|
||||
|
||||
// RegisterStrategy 注册路由策略
|
||||
func (e *RoutingEngine) RegisterStrategy(name string, template strategy.StrategyTemplate) {
|
||||
e.strategies[name] = template
|
||||
}
|
||||
|
||||
// SetMetrics 设置指标收集器
|
||||
func (e *RoutingEngine) SetMetrics(metrics RoutingMetrics) {
|
||||
e.metrics = metrics
|
||||
}
|
||||
|
||||
// SelectProvider 根据策略选择Provider
|
||||
func (e *RoutingEngine) SelectProvider(ctx context.Context, req *strategy.RoutingRequest, strategyName string) (*strategy.RoutingDecision, error) {
|
||||
// 查找策略
|
||||
tpl, ok := e.strategies[strategyName]
|
||||
if !ok {
|
||||
return nil, ErrStrategyNotFound
|
||||
}
|
||||
|
||||
// 执行策略选择
|
||||
decision, err := tpl.SelectProvider(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 记录指标
|
||||
if e.metrics != nil && decision != nil {
|
||||
e.metrics.RecordSelection(decision.Provider, decision.Strategy, decision)
|
||||
}
|
||||
|
||||
return decision, nil
|
||||
}
|
||||
Reference in New Issue
Block a user