--- phase: "03-" plan: 01 subsystem: Gateway tags: [gateway, cluster, domain-entities, yarp] dependency_graph: requires: [] provides: [GwCluster, GwDestination, GwHealthCheckConfig, GwSessionAffinityConfig] affects: [GwTenantRoute] tech_stack: added: - GwCluster (cluster aggregate root) - GwDestination (destination endpoint value object) - GwHealthCheckConfig (health check config value object) - GwSessionAffinityConfig (session affinity config value object) patterns: - Owned Entity for value objects - GUID-based string IDs - Soft delete + optimistic concurrency key_files: created: - Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwCluster.cs - Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwDestination.cs - Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwHealthCheckConfig.cs - Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwSessionAffinityConfig.cs decisions: - "GwCluster uses string Id (GUID) for YARP compatibility" - "GwDestination as owned entity embedded in GwCluster" - "Value objects configured for Owned Entity in EF Core" metrics: duration: "" completed_date: "2026-03-03" --- # Phase 03- Plan 01: Gateway Cluster Entities Summary ## One-Liner Created GwCluster aggregate root with embedded value objects (GwDestination, GwHealthCheckConfig, GwSessionAffinityConfig) to replace the old GwServiceInstance design, aligning with YARP ClusterConfig structure. ## Completed Tasks | Task | Name | Commit | Files | |------|------|--------|-------| | 1 | Create GwHealthCheckConfig value object | 198dc2a | GwHealthCheckConfig.cs | | 2 | Create GwSessionAffinityConfig value object | b07f56c | GwSessionAffinityConfig.cs | | 3 | Create GwDestination value object | 7ec34fa | GwDestination.cs | | 4 | Create GwCluster aggregate root | 774e3fb | GwCluster.cs | ## Verification - [x] All 4 files created - [x] Build passes with 0 errors - [x] Value objects structure matches YARP configuration model ## Deviations from Plan None - plan executed exactly as written. ## Auth Gates None. ## Notes The new GwCluster aggregate follows the existing GatewayAggregate code style with: - GUID-based string Id for YARP compatibility - Soft delete (IsDeleted) and optimistic concurrency (Version) fields - Embedded destinations list and configuration value objects - Standard audit fields (CreatedBy, CreatedTime, UpdatedBy, UpdatedTime)