94 lines
3.5 KiB
Markdown
94 lines
3.5 KiB
Markdown
# Summary: Plan 02 - Gateway Infrastructure
|
|
|
|
**Phase:** 01-gateway-routing
|
|
**Plan:** 02
|
|
**Status:** Completed
|
|
**Date:** 2026-03-03
|
|
|
|
---
|
|
|
|
## Tasks Completed
|
|
|
|
### Task 1: GatewayDbContext (Integrated into PlatformDbContext)
|
|
- **Status:** Done
|
|
- **Location:** `Fengling.Platform.Infrastructure/PlatformDbContext.cs`
|
|
- **Details:** Gateway DbSets integrated into PlatformDbContext (not separate file)
|
|
- `DbSet<GwTenant> GwTenants`
|
|
- `DbSet<GwTenantRoute> GwTenantRoutes`
|
|
- `DbSet<GwServiceInstance> GwServiceInstances`
|
|
- **Indexes configured:**
|
|
- GwTenant: TenantCode unique
|
|
- GwTenantRoute: TenantCode, ServiceName, ClusterId, composite (ServiceName, IsGlobal, Status)
|
|
- GwServiceInstance: composite unique (ClusterId, DestinationId), Health
|
|
|
|
### Task 2: IRouteStore and RouteStore
|
|
- **Status:** Done
|
|
- **Files:**
|
|
- `Fengling.Platform.Infrastructure/IRouteStore.cs`
|
|
- `Fengling.Platform.Infrastructure/RouteStore.cs`
|
|
- **Pattern:** Follows TenantStore pattern with generic constraint `where TContext : PlatformDbContext`
|
|
- **Methods:** FindByIdAsync, FindByTenantCodeAsync, FindByClusterIdAsync, GetAllAsync, GetPagedAsync, GetCountAsync, CreateAsync, UpdateAsync, DeleteAsync
|
|
- **Features:** Soft delete support, paged queries with filters
|
|
|
|
### Task 3: IRouteManager and RouteManager
|
|
- **Status:** Done
|
|
- **Files:**
|
|
- `Fengling.Platform.Infrastructure/IRouteManager.cs`
|
|
- `Fengling.Platform.Infrastructure/RouteManager.cs`
|
|
- **Pattern:** Delegates to IRouteStore (matches TenantManager pattern)
|
|
- **Constructor:** `public RouteManager(IRouteStore store)`
|
|
- **Methods:** FindByIdAsync, FindByTenantCodeAsync, GetAllAsync, CreateRouteAsync, UpdateRouteAsync, DeleteRouteAsync
|
|
|
|
### Task 4: IInstanceStore and InstanceStore
|
|
- **Status:** Done
|
|
- **Files:**
|
|
- `Fengling.Platform.Infrastructure/IInstanceStore.cs`
|
|
- `Fengling.Platform.Infrastructure/InstanceStore.cs`
|
|
- **Pattern:** Similar to RouteStore, generic constraint `where TContext : PlatformDbContext`
|
|
- **Methods:** FindByIdAsync, FindByClusterIdAsync, FindByDestinationAsync, GetAllAsync, GetPagedAsync, GetCountAsync, CreateAsync, UpdateAsync, DeleteAsync
|
|
- **Features:** ClusterId and DestinationId queries, health/status filtering
|
|
|
|
---
|
|
|
|
## Verification
|
|
|
|
- [x] Build passes with 0 errors
|
|
- [x] Store implementations follow TenantStore pattern
|
|
- [x] Manager implementations delegate to Stores
|
|
- [x] DbContext contains all required DbSets and indexes
|
|
- [x] Soft delete implemented in all Store classes
|
|
|
|
---
|
|
|
|
## Key Decisions
|
|
|
|
1. **DbContext Location:** Gateway entities integrated into PlatformDbContext rather than separate GatewayDbContext
|
|
- Rationale: Follows existing project conventions, simplifies DI
|
|
|
|
2. **ID Type:** Using `string` IDs for Gateway entities (consistent with source fengling-gateway)
|
|
- GwTenant.Id, GwTenantRoute.Id, GwServiceInstance.Id are strings
|
|
|
|
3. **Soft Delete:** All Store implementations support soft delete via `IsDeleted` property
|
|
|
|
---
|
|
|
|
## Artifacts Created
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `PlatformDbContext.cs` | Contains GwTenants, GwTenantRoutes, GwServiceInstances DbSets |
|
|
| `IRouteStore.cs` | Route CRUD interface |
|
|
| `RouteStore.cs` | Route data access implementation |
|
|
| `IRouteManager.cs` | Route business operations |
|
|
| `RouteManager.cs` | Route business logic |
|
|
| `IInstanceStore.cs` | Service instance CRUD interface |
|
|
| `InstanceStore.cs` | Service instance data access implementation |
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
Plan 03 will add:
|
|
- Extensions for IoC registration
|
|
- `AddGatewayStores<TContext>()` extension method
|
|
- DI configuration for Managers and Stores |