86 lines
2.7 KiB
Markdown
86 lines
2.7 KiB
Markdown
# Story 3.1: Module System Interface and Registry
|
|
|
|
## Metadata
|
|
- **Story ID**: 3.1
|
|
- **Title**: Module System Interface and Registry
|
|
- **Phase**: 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
|
|
|