--- phase: 01-gateway-routing plan: 02 type: execute wave: 1 depends_on: [] files_modified: - Fengling.Platform.Infrastructure/GatewayDbContext.cs - Fengling.Platform.Infrastructure/IRouteStore.cs - Fengling.Platform.Infrastructure/RouteStore.cs - Fengling.Platform.Infrastructure/IRouteManager.cs - Fengling.Platform.Infrastructure/RouteManager.cs - Fengling.Platform.Infrastructure/IInstanceStore.cs - Fengling.Platform.Infrastructure/InstanceStore.cs autonomous: true requirements: - GATEWAY-01 - GATEWAY-02 - GATEWAY-03 must_haves: truths: - "Store 实现遵循 TenantStore 模式" - "Manager 实现委托给 Stores" - "DbContext 包含所有 Gateway DbSets" artifacts: - path: "Fengling.Platform.Infrastructure/GatewayDbContext.cs" provides: "Gateway 实体的 EF Core DbContext" exports: ["GwTenants", "GwTenantRoutes", "GwServiceInstances"] - path: "Fengling.Platform.Infrastructure/IRouteStore.cs" provides: "路由 CRUD 接口" - path: "Fengling.Platform.Infrastructure/RouteStore.cs" provides: "路由数据访问实现" - path: "Fengling.Platform.Infrastructure/IRouteManager.cs" provides: "路由业务操作" - path: "Fengling.Platform.Infrastructure/RouteManager.cs" provides: "路由业务逻辑" key_links: - from: "RouteManager" to: "IRouteStore" via: "构造函数注入" pattern: "public RouteManager(IRouteStore store)" --- # 计划 02: 网关基础设施 ## 目标 创建网关路由的基础设施层 - Store、Manager 和 DbContext。 **目的:** 实现数据访问和业务逻辑,遵循 Tenant 管理模式。 **输出:** GatewayDbContext、Store 接口/实现、Manager 接口/实现。 ## 上下文 @Fengling.Platform.Infrastructure/Extensions.cs (DI 注册模式) @Fengling.Platform.Infrastructure/TenantStore.cs (Store 模式参考) @Fengling.Platform.Infrastructure/TenantManager.cs (Manager 模式参考) @../fengling-gateway/src/Data/GatewayDbContext.cs (源 DbContext) ## 任务 任务 1: 创建 GatewayDbContext Fengling.Platform.Infrastructure/GatewayDbContext.cs 创建继承 DbContext 的 GatewayDbContext: - 添加 DbSet GwTenants - 添加 DbSet GwTenantRoutes - 添加 DbSet GwServiceInstances - 在 OnModelCreating 中配置索引 (参考源 ../fengling-gateway) 关键索引: - GwTenant: TenantCode 唯一 - GwTenantRoute: TenantCode, ServiceName, ClusterId, 复合索引 (ServiceName, IsGlobal, Status) - GwServiceInstance: 复合索引 (ClusterId, DestinationId) 唯一, Health 索引 dotnet build 通过 GatewayDbContext 包含所有 DbSet 和索引配置 任务 2: 创建 IRouteStore 和 RouteStore Fengling.Platform.Infrastructure/IRouteStore.cs Fengling.Platform.Infrastructure/RouteStore.cs 创建 IRouteStore 接口,包含方法: - FindByIdAsync, FindByTenantCodeAsync, FindByClusterIdAsync - GetAllAsync, GetPagedAsync, GetCountAsync - CreateAsync, UpdateAsync, DeleteAsync (返回 IdentityResult) 创建实现 IRouteStore 的 RouteStore: - 参考 TenantStore 模式 - 泛型约束: where TContext : GatewayDbContext - 实现所有 CRUD 方法,支持软删除 dotnet build 通过 IRouteStore 接口和 RouteStore 实现 任务 3: 创建 IRouteManager 和 RouteManager Fengling.Platform.Infrastructure/IRouteManager.cs Fengling.Platform.Infrastructure/RouteManager.cs 创建 IRouteManager 接口,包含方法: - FindByIdAsync, FindByTenantCodeAsync, GetAllAsync - CreateRouteAsync, UpdateRouteAsync, DeleteRouteAsync 创建实现 IRouteManager 的 RouteManager: - 参考 TenantManager 模式 - 构造函数: public RouteManager(IRouteStore store) - 委托给 IRouteStore 进行数据操作 dotnet build 通过 IRouteManager 接口和 RouteManager 实现 任务 4: 创建 IInstanceStore 和 InstanceStore Fengling.Platform.Infrastructure/IInstanceStore.cs Fengling.Platform.Infrastructure/InstanceStore.cs 创建 IInstanceStore 接口: - FindByIdAsync, FindByClusterIdAsync, FindByDestinationAsync - GetAllAsync, GetPagedAsync, GetCountAsync - CreateAsync, UpdateAsync, DeleteAsync 创建实现 IInstanceStore 的 InstanceStore: - 类似 RouteStore 的模式 - 重点在 ClusterId 和 DestinationId 查询 dotnet build 通过 IInstanceStore 接口和 InstanceStore 实现 ## 验证 - [ ] GatewayDbContext 包含所有 DbSet 可编译 - [ ] Store 实现遵循 TenantStore 模式 - [ ] Manager 实现委托给 Stores - [ ] Build 无错误通过 ## 成功标准 基础设施层准备好进行 Extensions 集成。