Transform all documentation from modular monolith to true microservices
architecture where core services are independently deployable.
Key Changes:
- Core Kernel: Infrastructure only (no business logic)
- Core Services: Auth, Identity, Authz, Audit as separate microservices
- Each service has own entry point (cmd/{service}/)
- Each service has own gRPC server and database schema
- Services register with Consul for service discovery
- API Gateway: Moved from Epic 8 to Epic 1 as core infrastructure
- Single entry point for all external traffic
- Handles routing, JWT validation, rate limiting, CORS
- Service Discovery: Consul as primary mechanism (ADR-0033)
- Database Pattern: Per-service connections with schema isolation
Documentation Updates:
- Updated all 9 architecture documents
- Updated 4 ADRs and created 2 new ADRs (API Gateway, Service Discovery)
- Rewrote Epic 1: Core Kernel & Infrastructure (infrastructure only)
- Rewrote Epic 2: Core Services (Auth, Identity, Authz, Audit as services)
- Updated Epic 3-8 stories for service architecture
- Updated plan.md, playbook.md, requirements.md, index.md
- Updated all epic READMEs and story files
New ADRs:
- ADR-0032: API Gateway Strategy
- ADR-0033: Service Discovery Implementation (Consul)
New Stories:
- Epic 1.7: Service Client Interfaces
- Epic 1.8: API Gateway Implementation
103 lines
3.6 KiB
Markdown
103 lines
3.6 KiB
Markdown
# Story 1.1: Enhanced Dependency Injection Container
|
|
|
|
## Metadata
|
|
- **Story ID**: 1.1
|
|
- **Title**: Enhanced Dependency Injection Container
|
|
- **Epic**: 1 - Core Kernel & Infrastructure
|
|
- **Status**: Completed
|
|
- **Priority**: High
|
|
- **Estimated Time**: 3-4 hours
|
|
- **Dependencies**: 0.5
|
|
|
|
## Goal
|
|
Extend the DI container to provide core kernel infrastructure services only (no business logic services) with proper lifecycle management, dependency resolution, and service override support.
|
|
|
|
## Description
|
|
This story extends the basic DI container to support core kernel services only: config, logger, health checks, metrics, error bus, observability, and service registry. The container must handle service initialization order, lifecycle management, and provide a clean way to override services for testing.
|
|
|
|
**Note:** Business services (Auth, Identity, Authz, Audit) are NOT in the core kernel. They are separate services implemented in Epic 2.
|
|
|
|
## Deliverables
|
|
|
|
### 1. Extended DI Container (`internal/di/container.go`)
|
|
- Registration of all core services
|
|
- Lifecycle management via FX
|
|
- Service override support for testing
|
|
- Dependency resolution
|
|
- Error handling during initialization
|
|
|
|
### 2. Provider Functions (`internal/di/providers.go`)
|
|
Complete provider functions for core kernel services only:
|
|
- `ProvideConfig() fx.Option` - Configuration provider
|
|
- `ProvideLogger() fx.Option` - Logger provider
|
|
- `ProvideHealthCheckers() fx.Option` - Health check registry provider
|
|
- `ProvideMetrics() fx.Option` - Prometheus metrics registry provider
|
|
- `ProvideErrorBus() fx.Option` - Error bus provider
|
|
- `ProvideTracer() fx.Option` - OpenTelemetry tracer provider
|
|
- `ProvideServiceRegistry() fx.Option` - Service registry provider (Consul)
|
|
|
|
**Note:** Database provider is NOT in core kernel - each service will create its own database client.
|
|
|
|
### 3. Core Module (`internal/di/core_module.go`)
|
|
- Export `CoreModule() fx.Option` that provides all core services
|
|
- Easy composition with future modules
|
|
- Single import point for core services
|
|
|
|
## Implementation Steps
|
|
|
|
1. **Extend Container**
|
|
- Update `internal/di/container.go`
|
|
- Add support for all core services
|
|
- Implement lifecycle hooks
|
|
|
|
2. **Create Provider Functions**
|
|
- Create `internal/di/providers.go`
|
|
- Implement all provider functions
|
|
- Handle dependencies correctly
|
|
|
|
3. **Create Core Module**
|
|
- Create `internal/di/core_module.go`
|
|
- Export CoreModule function
|
|
- Document usage
|
|
|
|
4. **Test Integration**
|
|
- Verify all services are provided
|
|
- Test service overrides
|
|
- Test lifecycle hooks
|
|
|
|
## Acceptance Criteria
|
|
- [x] All core kernel services are provided via DI container
|
|
- [x] Services are initialized in correct dependency order
|
|
- [x] Lifecycle hooks work for all services
|
|
- [x] Services can be overridden for testing
|
|
- [x] DI container compiles without errors
|
|
- [x] CoreModule can be imported and used
|
|
- [x] Error handling works during initialization
|
|
- [x] No business logic services in core kernel
|
|
- [x] Service registry provider is included
|
|
|
|
## Related ADRs
|
|
- [ADR-0003: Dependency Injection Framework](../../adr/0003-dependency-injection-framework.md)
|
|
|
|
## Implementation Notes
|
|
- Use FX's dependency injection features
|
|
- Ensure proper initialization order
|
|
- Support service overrides via FX options
|
|
- Handle errors gracefully during startup
|
|
- Document provider functions
|
|
|
|
## Testing
|
|
```bash
|
|
# Test DI container
|
|
go test ./internal/di/...
|
|
|
|
# Test service injection
|
|
go run cmd/platform/main.go
|
|
```
|
|
|
|
## Files to Create/Modify
|
|
- `internal/di/container.go` - Extended container
|
|
- `internal/di/providers.go` - Provider functions
|
|
- `internal/di/core_module.go` - Core module export
|
|
|