80 lines
No EOL
2.4 KiB
TypeScript
80 lines
No EOL
2.4 KiB
TypeScript
/**
|
|
* Data Pipeline Service
|
|
* Simplified entry point using ServiceApplication framework
|
|
*/
|
|
|
|
import { initializeServiceConfig } from '@stock-bot/config';
|
|
import {
|
|
ServiceApplication,
|
|
createServiceContainerFromConfig,
|
|
initializeServices as initializeAwilixServices,
|
|
} from '@stock-bot/di';
|
|
import { getLogger } from '@stock-bot/logger';
|
|
|
|
// Local imports
|
|
import { initializeAllHandlers } from './handlers';
|
|
import { createRoutes } from './routes/create-routes';
|
|
import { setupServiceContainer } from './container-setup';
|
|
|
|
// Initialize configuration
|
|
const config = initializeServiceConfig();
|
|
console.log('Data Pipeline Service Configuration:', JSON.stringify(config, null, 2));
|
|
|
|
// Create service application
|
|
const app = new ServiceApplication(
|
|
config,
|
|
{
|
|
serviceName: 'data-pipeline',
|
|
enableHandlers: true,
|
|
enableScheduledJobs: true,
|
|
corsConfig: {
|
|
origin: '*',
|
|
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'],
|
|
allowHeaders: ['Content-Type', 'Authorization'],
|
|
credentials: false,
|
|
},
|
|
serviceMetadata: {
|
|
version: '1.0.0',
|
|
description: 'Data processing and transformation pipeline',
|
|
endpoints: {
|
|
health: '/health',
|
|
operations: '/api/operations',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
// Custom lifecycle hooks
|
|
onContainerReady: (container) => {
|
|
// Setup service-specific configuration
|
|
const enhancedContainer = setupServiceContainer(config, container);
|
|
return enhancedContainer;
|
|
},
|
|
onStarted: (port) => {
|
|
const logger = getLogger('data-pipeline');
|
|
logger.info('Data pipeline service startup initiated with ServiceApplication framework');
|
|
},
|
|
}
|
|
);
|
|
|
|
// Container factory function
|
|
async function createContainer(config: any) {
|
|
const container = createServiceContainerFromConfig(config, {
|
|
enableQuestDB: config.database.questdb?.enabled || false,
|
|
// Data pipeline needs all databases
|
|
enableMongoDB: true,
|
|
enablePostgres: true,
|
|
enableCache: true,
|
|
enableQueue: true,
|
|
enableBrowser: false, // Data pipeline doesn't need browser
|
|
enableProxy: false, // Data pipeline doesn't need proxy
|
|
});
|
|
await initializeAwilixServices(container);
|
|
return container;
|
|
}
|
|
|
|
// Start the service
|
|
app.start(createContainer, createRoutes, initializeAllHandlers).catch(error => {
|
|
const logger = getLogger('data-pipeline');
|
|
logger.fatal('Failed to start data pipeline service', { error });
|
|
process.exit(1);
|
|
}); |