feat: reword phase to epic, update mkdocs
This commit is contained in:
85
docs/content/stories/epic3/3.1-module-system-interface.md
Normal file
85
docs/content/stories/epic3/3.1-module-system-interface.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Story 3.1: Module System Interface and Registry
|
||||
|
||||
## Metadata
|
||||
- **Story ID**: 3.1
|
||||
- **Title**: Module System Interface and Registry
|
||||
- **Epic**: 3 - Module Framework
|
||||
- **Status**: Pending
|
||||
- **Priority**: High
|
||||
- **Estimated Time**: 5-6 hours
|
||||
- **Dependencies**: 1.1, 2.3
|
||||
|
||||
## Goal
|
||||
Design and implement the complete module system interface with registration, dependency resolution, and lifecycle management.
|
||||
|
||||
## Description
|
||||
This story creates the foundation of the module system by defining the module interface, manifest structure, and registry. The system must support module registration, dependency validation, and lifecycle hooks.
|
||||
|
||||
## Deliverables
|
||||
|
||||
### 1. Module Interface (`pkg/module/module.go`)
|
||||
- `IModule` interface with:
|
||||
- `Name() string` - Module name
|
||||
- `Version() string` - Module version
|
||||
- `Dependencies() []string` - Module dependencies
|
||||
- `Init() fx.Option` - FX options for module initialization
|
||||
- `Migrations() []func(*ent.Client) error` - Database migrations
|
||||
- Optional lifecycle hooks: `OnStart(ctx context.Context) error`
|
||||
- Optional lifecycle hooks: `OnStop(ctx context.Context) error`
|
||||
|
||||
### 2. Module Manifest (`pkg/module/manifest.go`)
|
||||
- `Manifest` struct with:
|
||||
- Name, Version, Dependencies
|
||||
- Permissions list
|
||||
- Routes definition
|
||||
- `module.yaml` schema definition
|
||||
- Manifest parsing and validation
|
||||
|
||||
### 3. Module Registry (`internal/registry/registry.go`)
|
||||
- Thread-safe module map
|
||||
- `Register(m IModule)` function
|
||||
- `All() []IModule` function
|
||||
- `Get(name string) (IModule, error)` function
|
||||
- Dependency validation (check dependencies are satisfied)
|
||||
- Duplicate name detection
|
||||
- Version compatibility checking
|
||||
- Dependency cycle detection
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
1. **Create Module Interface**
|
||||
- Create `pkg/module/module.go`
|
||||
- Define IModule interface
|
||||
- Add lifecycle hooks
|
||||
|
||||
2. **Create Module Manifest**
|
||||
- Create `pkg/module/manifest.go`
|
||||
- Define Manifest struct
|
||||
- Define module.yaml schema
|
||||
|
||||
3. **Create Module Registry**
|
||||
- Create `internal/registry/registry.go`
|
||||
- Implement thread-safe registry
|
||||
- Add validation logic
|
||||
|
||||
4. **Test Registration**
|
||||
- Test module registration
|
||||
- Test dependency validation
|
||||
- Test duplicate detection
|
||||
|
||||
## Acceptance Criteria
|
||||
- [ ] Modules can register via `registry.Register()`
|
||||
- [ ] Registry validates dependencies
|
||||
- [ ] Registry prevents duplicate registrations
|
||||
- [ ] Module interface is extensible
|
||||
- [ ] Dependency cycles are detected
|
||||
- [ ] Version compatibility is checked
|
||||
|
||||
## Related ADRs
|
||||
- [ADR-0021: Module Loading Strategy](../../adr/0021-module-loading-strategy.md)
|
||||
|
||||
## Files to Create/Modify
|
||||
- `pkg/module/module.go` - Module interface
|
||||
- `pkg/module/manifest.go` - Module manifest
|
||||
- `internal/registry/registry.go` - Module registry
|
||||
|
||||
Reference in New Issue
Block a user