refactoring continuing
This commit is contained in:
parent
742e590382
commit
a0a3b26177
20 changed files with 394 additions and 798 deletions
85
apps/data-ingestion/AWILIX-MIGRATION.md
Normal file
85
apps/data-ingestion/AWILIX-MIGRATION.md
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
# Awilix DI Container Migration Guide
|
||||
|
||||
This guide explains how to use the new Awilix dependency injection container in the data-ingestion service.
|
||||
|
||||
## Overview
|
||||
|
||||
The Awilix container provides proper dependency injection for decoupled libraries, allowing them to be reused in other projects without stock-bot specific dependencies.
|
||||
|
||||
## Current Implementation
|
||||
|
||||
The data-ingestion service now uses a hybrid approach:
|
||||
1. Awilix container for ProxyManager and other decoupled services
|
||||
2. Legacy service factory for backward compatibility
|
||||
|
||||
## Usage Example
|
||||
|
||||
```typescript
|
||||
// Create Awilix container
|
||||
const awilixConfig = {
|
||||
redis: {
|
||||
host: config.database.dragonfly.host,
|
||||
port: config.database.dragonfly.port,
|
||||
db: config.database.dragonfly.db,
|
||||
},
|
||||
mongodb: {
|
||||
uri: config.database.mongodb.uri,
|
||||
database: config.database.mongodb.database,
|
||||
},
|
||||
postgres: {
|
||||
host: config.database.postgres.host,
|
||||
port: config.database.postgres.port,
|
||||
database: config.database.postgres.database,
|
||||
user: config.database.postgres.user,
|
||||
password: config.database.postgres.password,
|
||||
},
|
||||
proxy: {
|
||||
cachePrefix: 'proxy:',
|
||||
ttl: 3600,
|
||||
},
|
||||
};
|
||||
|
||||
const container = createServiceContainer(awilixConfig);
|
||||
await initializeServices(container);
|
||||
|
||||
// Access services from container
|
||||
const proxyManager = container.resolve('proxyManager');
|
||||
const cache = container.resolve('cache');
|
||||
```
|
||||
|
||||
## Handler Integration
|
||||
|
||||
Handlers receive services through the enhanced service container:
|
||||
|
||||
```typescript
|
||||
// Create service adapter with proxy from Awilix
|
||||
const serviceContainerWithProxy = createServiceAdapter(services);
|
||||
Object.defineProperty(serviceContainerWithProxy, 'proxy', {
|
||||
get: () => container.resolve('proxyManager'),
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
|
||||
// Handlers can now access proxy service
|
||||
class MyHandler extends BaseHandler {
|
||||
async myOperation() {
|
||||
const proxy = this.proxy.getRandomProxy();
|
||||
// Use proxy...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **Decoupled Libraries**: Libraries no longer depend on @stock-bot/config
|
||||
2. **Reusability**: Libraries can be used in other projects
|
||||
3. **Testability**: Easy to mock dependencies for testing
|
||||
4. **Type Safety**: Full TypeScript support with Awilix
|
||||
|
||||
## Next Steps
|
||||
|
||||
To fully migrate to Awilix:
|
||||
1. Update HTTP library to accept dependencies via constructor
|
||||
2. Update Queue library to accept Redis config via constructor
|
||||
3. Create actual MongoDB, PostgreSQL, and QuestDB clients in the container
|
||||
4. Remove legacy service factory once all services are migrated
|
||||
Loading…
Add table
Add a link
Reference in a new issue