541 lines
13 KiB
Markdown
541 lines
13 KiB
Markdown
|
# Package Integration Map
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
This document maps out the integration points between our framework packages and outlines how to maintain and enhance these integrations while achieving Laravel API compatibility.
|
||
|
|
||
|
> **Related Documentation**
|
||
|
> - See [Core Architecture](core_architecture.md) for system design
|
||
|
> - See [Laravel Compatibility Roadmap](laravel_compatibility_roadmap.md) for implementation status
|
||
|
> - See [Foundation Integration Guide](foundation_integration_guide.md) for integration patterns
|
||
|
> - See [Testing Guide](testing_guide.md) for testing approaches
|
||
|
|
||
|
## Package Documentation
|
||
|
|
||
|
### Core Framework
|
||
|
1. Core Package
|
||
|
- [Core Package Specification](core_package_specification.md)
|
||
|
- [Core Architecture](core_architecture.md)
|
||
|
|
||
|
2. Container Package
|
||
|
- [Container Package Specification](container_package_specification.md)
|
||
|
- [Container Gap Analysis](container_gap_analysis.md)
|
||
|
- [Container Feature Integration](container_feature_integration.md)
|
||
|
- [Container Migration Guide](container_migration_guide.md)
|
||
|
|
||
|
3. Contracts Package
|
||
|
- [Contracts Package Specification](contracts_package_specification.md)
|
||
|
|
||
|
4. Events Package
|
||
|
- [Events Package Specification](events_package_specification.md)
|
||
|
- [Events Gap Analysis](events_gap_analysis.md)
|
||
|
|
||
|
5. Pipeline Package
|
||
|
- [Pipeline Package Specification](pipeline_package_specification.md)
|
||
|
- [Pipeline Gap Analysis](pipeline_gap_analysis.md)
|
||
|
|
||
|
6. Support Package
|
||
|
- [Support Package Specification](support_package_specification.md)
|
||
|
|
||
|
### Infrastructure
|
||
|
1. Bus Package
|
||
|
- [Bus Package Specification](bus_package_specification.md)
|
||
|
- [Bus Gap Analysis](bus_gap_analysis.md)
|
||
|
|
||
|
2. Config Package
|
||
|
- [Config Package Specification](config_package_specification.md)
|
||
|
- [Config Gap Analysis](config_gap_analysis.md)
|
||
|
|
||
|
3. Filesystem Package
|
||
|
- [Filesystem Package Specification](filesystem_package_specification.md)
|
||
|
- [Filesystem Gap Analysis](filesystem_gap_analysis.md)
|
||
|
|
||
|
4. Model Package
|
||
|
- [Model Package Specification](model_package_specification.md)
|
||
|
- [Model Gap Analysis](model_gap_analysis.md)
|
||
|
|
||
|
5. Process Package
|
||
|
- [Process Package Specification](process_package_specification.md)
|
||
|
- [Process Gap Analysis](process_gap_analysis.md)
|
||
|
|
||
|
6. Queue Package
|
||
|
- [Queue Package Specification](queue_package_specification.md)
|
||
|
- [Queue Gap Analysis](queue_gap_analysis.md)
|
||
|
|
||
|
7. Route Package
|
||
|
- [Route Package Specification](route_package_specification.md)
|
||
|
- [Route Gap Analysis](route_gap_analysis.md)
|
||
|
|
||
|
8. Testing Package
|
||
|
- [Testing Package Specification](testing_package_specification.md)
|
||
|
- [Testing Gap Analysis](testing_gap_analysis.md)
|
||
|
|
||
|
## Core Integration Points
|
||
|
|
||
|
### 1. Container Integration Hub
|
||
|
```dart
|
||
|
// All packages integrate with Container for dependency injection
|
||
|
class ServiceProvider {
|
||
|
final Container container;
|
||
|
|
||
|
// Current Integration
|
||
|
void register() {
|
||
|
container.registerSingleton<Service>(ServiceImpl());
|
||
|
}
|
||
|
|
||
|
// Laravel-Compatible Enhancement
|
||
|
void register() {
|
||
|
// Add contextual binding
|
||
|
container.when(Service).needs<Logger>().give(FileLogger());
|
||
|
|
||
|
// Add tagged binding
|
||
|
container.tag([
|
||
|
EmailNotifier,
|
||
|
SmsNotifier,
|
||
|
PushNotifier
|
||
|
], 'notifications');
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 2. Event System Integration
|
||
|
```dart
|
||
|
// Events package integrates with multiple packages
|
||
|
class EventServiceProvider {
|
||
|
// Current Integration
|
||
|
void register() {
|
||
|
// Queue Integration
|
||
|
container.singleton<QueuedEventDispatcher>((c) =>
|
||
|
QueuedEventDispatcher(
|
||
|
queue: c.make<QueueContract>(),
|
||
|
broadcaster: c.make<BroadcasterContract>()
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// Bus Integration
|
||
|
container.singleton<CommandDispatcher>((c) =>
|
||
|
CommandDispatcher(
|
||
|
events: c.make<EventDispatcherContract>(),
|
||
|
queue: c.make<QueueContract>()
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// Laravel-Compatible Enhancement
|
||
|
void register() {
|
||
|
// Add event discovery
|
||
|
container.singleton<EventDiscovery>((c) =>
|
||
|
EventDiscovery(c.make<Reflector>())
|
||
|
);
|
||
|
|
||
|
// Add after commit handling
|
||
|
container.singleton<DatabaseEventDispatcher>((c) =>
|
||
|
DatabaseEventDispatcher(
|
||
|
events: c.make<EventDispatcherContract>(),
|
||
|
db: c.make<DatabaseManager>()
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 3. Queue and Bus Integration
|
||
|
```dart
|
||
|
// Queue and Bus packages work together for job handling
|
||
|
class QueuedCommandDispatcher {
|
||
|
// Current Integration
|
||
|
Future<void> dispatch(Command command) async {
|
||
|
if (command is ShouldQueue) {
|
||
|
await queue.push(QueuedCommandJob(command));
|
||
|
} else {
|
||
|
await commandBus.dispatch(command);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Laravel-Compatible Enhancement
|
||
|
Future<void> dispatch(Command command) async {
|
||
|
// Add job middleware
|
||
|
var job = QueuedCommandJob(command)
|
||
|
..through([
|
||
|
RateLimitedMiddleware(),
|
||
|
WithoutOverlappingMiddleware()
|
||
|
]);
|
||
|
|
||
|
// Add job batching
|
||
|
if (command is BatchableCommand) {
|
||
|
await queue.batch([job])
|
||
|
.allowFailures()
|
||
|
.dispatch();
|
||
|
} else {
|
||
|
await queue.push(job);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 4. Route and Core Integration
|
||
|
```dart
|
||
|
// Route package integrates with Core for HTTP handling
|
||
|
class RouterServiceProvider {
|
||
|
// Current Integration
|
||
|
void register() {
|
||
|
container.singleton<Router>((c) =>
|
||
|
Router()
|
||
|
..use(LoggingMiddleware())
|
||
|
..use(AuthMiddleware())
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// Laravel-Compatible Enhancement
|
||
|
void register() {
|
||
|
// Add model binding
|
||
|
container.singleton<RouteModelBinder>((c) =>
|
||
|
RouteModelBinder(
|
||
|
models: c.make<ModelRegistry>(),
|
||
|
db: c.make<DatabaseManager>()
|
||
|
)
|
||
|
);
|
||
|
|
||
|
// Add subdomain routing
|
||
|
container.singleton<SubdomainRouter>((c) =>
|
||
|
SubdomainRouter(
|
||
|
domains: c.make<DomainRegistry>(),
|
||
|
router: c.make<Router>()
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 5. Process and Queue Integration
|
||
|
```dart
|
||
|
// Process package integrates with Queue for background tasks
|
||
|
class ProcessManager {
|
||
|
// Current Integration
|
||
|
Future<void> runProcess(String command) async {
|
||
|
var process = await Process.start(command);
|
||
|
queue.push(ProcessMonitorJob(process.pid));
|
||
|
}
|
||
|
|
||
|
// Laravel-Compatible Enhancement
|
||
|
Future<void> runProcess(String command) async {
|
||
|
// Add scheduling
|
||
|
scheduler.job(ProcessJob(command))
|
||
|
.everyFiveMinutes()
|
||
|
.withoutOverlapping()
|
||
|
.onFailure((e) => notifyAdmin(e));
|
||
|
|
||
|
// Add process pools
|
||
|
processPool.job(command)
|
||
|
.onServers(['worker-1', 'worker-2'])
|
||
|
.dispatch();
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 6. Model and Event Integration
|
||
|
```dart
|
||
|
// Model package integrates with Events for model events
|
||
|
class ModelEventDispatcher {
|
||
|
// Current Integration
|
||
|
Future<void> save(Model model) async {
|
||
|
await events.dispatch(ModelSaving(model));
|
||
|
await db.save(model);
|
||
|
await events.dispatch(ModelSaved(model));
|
||
|
}
|
||
|
|
||
|
// Laravel-Compatible Enhancement
|
||
|
Future<void> save(Model model) async {
|
||
|
// Add transaction awareness
|
||
|
await db.transaction((tx) async {
|
||
|
await events.dispatch(ModelSaving(model));
|
||
|
await tx.save(model);
|
||
|
|
||
|
// Queue after commit
|
||
|
events.afterCommit(() =>
|
||
|
events.dispatch(ModelSaved(model))
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Package-Specific Integration Points
|
||
|
|
||
|
### 1. Container Package
|
||
|
```dart
|
||
|
// Integration with other packages
|
||
|
class Container {
|
||
|
// Current
|
||
|
void bootstrap() {
|
||
|
registerSingleton<EventDispatcher>();
|
||
|
registerSingleton<QueueManager>();
|
||
|
registerSingleton<CommandBus>();
|
||
|
}
|
||
|
|
||
|
// Enhanced
|
||
|
void bootstrap() {
|
||
|
// Add service repository
|
||
|
registerSingleton<ServiceRepository>((c) =>
|
||
|
ServiceRepository([
|
||
|
EventServiceProvider(),
|
||
|
QueueServiceProvider(),
|
||
|
BusServiceProvider()
|
||
|
])
|
||
|
);
|
||
|
|
||
|
// Add deferred loading
|
||
|
registerDeferred<ReportGenerator>((c) =>
|
||
|
ReportGenerator(c.make<Database>())
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 2. Events Package
|
||
|
```dart
|
||
|
// Integration with other packages
|
||
|
class EventDispatcher {
|
||
|
// Current
|
||
|
Future<void> dispatch(Event event) async {
|
||
|
if (event is QueuedEvent) {
|
||
|
await queue.push(event);
|
||
|
} else {
|
||
|
await notifyListeners(event);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Enhanced
|
||
|
Future<void> dispatch(Event event) async {
|
||
|
// Add broadcast channels
|
||
|
if (event is BroadcastEvent) {
|
||
|
await broadcast.to(event.channels)
|
||
|
.with(['queue' => queue.connection()])
|
||
|
.send(event);
|
||
|
}
|
||
|
|
||
|
// Add event subscribers
|
||
|
await container.make<EventSubscriberRegistry>()
|
||
|
.dispatch(event);
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 3. Queue Package
|
||
|
```dart
|
||
|
// Integration with other packages
|
||
|
class QueueManager {
|
||
|
// Current
|
||
|
Future<void> process() async {
|
||
|
while (true) {
|
||
|
var job = await queue.pop();
|
||
|
await job.handle();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Enhanced
|
||
|
Future<void> process() async {
|
||
|
// Add worker management
|
||
|
worker.supervise((worker) {
|
||
|
worker.process('default')
|
||
|
.throughMiddleware([
|
||
|
RateLimited::class,
|
||
|
PreventOverlapping::class
|
||
|
])
|
||
|
.withEvents(events);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Integration Enhancement Strategy
|
||
|
|
||
|
1. **Container Enhancements**
|
||
|
- Add contextual binding
|
||
|
- Add tagged bindings
|
||
|
- Keep existing integrations working
|
||
|
|
||
|
2. **Event System Enhancements**
|
||
|
- Add event discovery
|
||
|
- Add after commit handling
|
||
|
- Maintain existing event flow
|
||
|
|
||
|
3. **Queue System Enhancements**
|
||
|
- Add job batching
|
||
|
- Add better job middleware
|
||
|
- Keep existing job handling
|
||
|
|
||
|
4. **Route System Enhancements**
|
||
|
- Add model binding
|
||
|
- Add subdomain routing
|
||
|
- Maintain existing routing
|
||
|
|
||
|
5. **Process System Enhancements**
|
||
|
- Add scheduling
|
||
|
- Add process pools
|
||
|
- Keep existing process management
|
||
|
|
||
|
6. **Model System Enhancements**
|
||
|
- Add Eloquent features
|
||
|
- Add relationships
|
||
|
- Maintain existing model events
|
||
|
|
||
|
## Implementation Steps
|
||
|
|
||
|
1. **Document Current Integration Points**
|
||
|
- Map all package dependencies
|
||
|
- Document integration interfaces
|
||
|
- Note existing functionality
|
||
|
|
||
|
2. **Plan Laravel-Compatible Interfaces**
|
||
|
- Review Laravel's interfaces
|
||
|
- Design compatible interfaces
|
||
|
- Plan migration strategy
|
||
|
|
||
|
3. **Implement Enhancements**
|
||
|
- Start with Container enhancements
|
||
|
- Add Event enhancements
|
||
|
- Add Queue enhancements
|
||
|
- Continue with other packages
|
||
|
|
||
|
4. **Test Integration Points**
|
||
|
- Test existing functionality
|
||
|
- Test new functionality
|
||
|
- Test Laravel compatibility
|
||
|
|
||
|
5. **Migration Guide**
|
||
|
- Document breaking changes
|
||
|
- Provide upgrade path
|
||
|
- Include examples
|
||
|
|
||
|
## Package Dependencies
|
||
|
|
||
|
```mermaid
|
||
|
graph TD
|
||
|
Core[Core] --> Container[Container]
|
||
|
Core --> Events[Events]
|
||
|
Core --> Pipeline[Pipeline]
|
||
|
|
||
|
Container --> Contracts[Contracts]
|
||
|
Events --> Container
|
||
|
Pipeline --> Container
|
||
|
|
||
|
Bus[Bus] --> Events
|
||
|
Bus --> Queue[Queue]
|
||
|
|
||
|
Config[Config] --> Container
|
||
|
|
||
|
Filesystem[Filesystem] --> Container
|
||
|
|
||
|
Model[Model] --> Events
|
||
|
Model --> Container
|
||
|
|
||
|
Process[Process] --> Events
|
||
|
Process --> Queue
|
||
|
|
||
|
Queue --> Events
|
||
|
Queue --> Container
|
||
|
|
||
|
Route[Route] --> Pipeline
|
||
|
Route --> Container
|
||
|
|
||
|
Testing[Testing] --> Container
|
||
|
Testing --> Events
|
||
|
```
|
||
|
|
||
|
## Implementation Status
|
||
|
|
||
|
### Core Framework (90%)
|
||
|
- Core Package (95%)
|
||
|
* Application lifecycle ✓
|
||
|
* Service providers ✓
|
||
|
* HTTP kernel ✓
|
||
|
* Console kernel ✓
|
||
|
* Exception handling ✓
|
||
|
* Needs: Performance optimizations
|
||
|
|
||
|
- Container Package (90%)
|
||
|
* Basic DI ✓
|
||
|
* Auto-wiring ✓
|
||
|
* Service providers ✓
|
||
|
* Needs: Contextual binding
|
||
|
|
||
|
- Events Package (85%)
|
||
|
* Event dispatching ✓
|
||
|
* Event subscribers ✓
|
||
|
* Event broadcasting ✓
|
||
|
* Needs: Event discovery
|
||
|
|
||
|
### Infrastructure (80%)
|
||
|
- Bus Package (85%)
|
||
|
* Command dispatching ✓
|
||
|
* Command queuing ✓
|
||
|
* Needs: Command batching
|
||
|
|
||
|
- Config Package (80%)
|
||
|
* Configuration repository ✓
|
||
|
* Environment loading ✓
|
||
|
* Needs: Config caching
|
||
|
|
||
|
- Filesystem Package (75%)
|
||
|
* Local driver ✓
|
||
|
* Cloud storage ✓
|
||
|
* Needs: Streaming support
|
||
|
|
||
|
- Model Package (80%)
|
||
|
* Basic ORM ✓
|
||
|
* Relationships ✓
|
||
|
* Needs: Model events
|
||
|
|
||
|
- Process Package (85%)
|
||
|
* Process management ✓
|
||
|
* Process pools ✓
|
||
|
* Needs: Process monitoring
|
||
|
|
||
|
- Queue Package (85%)
|
||
|
* Queue workers ✓
|
||
|
* Job batching ✓
|
||
|
* Needs: Rate limiting
|
||
|
|
||
|
- Route Package (90%)
|
||
|
* Route registration ✓
|
||
|
* Route matching ✓
|
||
|
* Middleware ✓
|
||
|
* Needs: Route caching
|
||
|
|
||
|
- Testing Package (85%)
|
||
|
* HTTP testing ✓
|
||
|
* Database testing ✓
|
||
|
* Needs: Browser testing
|
||
|
|
||
|
## Development Guidelines
|
||
|
|
||
|
### 1. Getting Started
|
||
|
Before implementing integrations:
|
||
|
1. Review [Getting Started Guide](getting_started.md)
|
||
|
2. Check [Laravel Compatibility Roadmap](laravel_compatibility_roadmap.md)
|
||
|
3. Follow [Testing Guide](testing_guide.md)
|
||
|
4. Use [Foundation Integration Guide](foundation_integration_guide.md)
|
||
|
|
||
|
### 2. Implementation Process
|
||
|
For each integration:
|
||
|
1. Write tests following [Testing Guide](testing_guide.md)
|
||
|
2. Implement following Laravel patterns
|
||
|
3. Document following [Getting Started Guide](getting_started.md#documentation)
|
||
|
4. Integrate following [Foundation Integration Guide](foundation_integration_guide.md)
|
||
|
|
||
|
### 3. Quality Requirements
|
||
|
All integrations must:
|
||
|
1. Pass all tests (see [Testing Guide](testing_guide.md))
|
||
|
2. Meet Laravel compatibility requirements
|
||
|
3. Follow integration patterns (see [Foundation Integration Guide](foundation_integration_guide.md))
|
||
|
4. Match package specifications
|
||
|
|
||
|
### 4. Documentation Requirements
|
||
|
Integration documentation must:
|
||
|
1. Explain integration patterns
|
||
|
2. Show usage examples
|
||
|
3. Cover error handling
|
||
|
4. Include performance tips
|
||
|
5. Follow standards in [Getting Started Guide](getting_started.md#documentation)
|