2024-02-22 06:15:16 +00:00
|
|
|
import dotenv from 'dotenv';
|
|
|
|
dotenv.config();
|
|
|
|
|
2024-02-23 06:18:00 +00:00
|
|
|
import WorkflowOrchestrator from './workflows/WorkflowOrchestrator';
|
2024-03-02 07:41:11 +00:00
|
|
|
import rDramaSession from './rdrama/session/SessionManager';
|
|
|
|
import redditSession from './reddit/session/SessionManager';
|
2024-02-23 06:18:00 +00:00
|
|
|
import { CommentParser } from './rdrama/services/CommentParser';
|
2024-02-23 07:02:46 +00:00
|
|
|
import { DatabaseInitializer } from './db/initializeDatabase';
|
2024-02-27 06:39:51 +00:00
|
|
|
import { DatabaseService } from './db/services/Database';
|
|
|
|
import { DatabaseMaintenanceService } from './db/services/DatabaseMaintenance';
|
2024-02-24 06:20:01 +00:00
|
|
|
import { CommentProcessor } from './rdrama/services/CommentProcessor';
|
2024-03-01 06:40:34 +00:00
|
|
|
import { MessageService } from './utils/MessageService';
|
|
|
|
import { CommentPoster } from './rdrama/services/CommentPoster';
|
2024-02-23 06:18:00 +00:00
|
|
|
// Import other necessary services or configurations
|
2024-02-22 06:15:16 +00:00
|
|
|
|
2024-02-23 06:18:00 +00:00
|
|
|
async function startApplication() {
|
2024-03-05 06:25:05 +00:00
|
|
|
console.log('Database Start')
|
|
|
|
const databaseInitializer = DatabaseInitializer.getInstance();
|
|
|
|
const db = await databaseInitializer.getDbInstance()
|
|
|
|
if (!db) {
|
|
|
|
throw new Error('Failed to initialize the database.');
|
|
|
|
}
|
|
|
|
const databaseService = new DatabaseService(db)
|
|
|
|
const canSend = await databaseService.canSendNotification();
|
|
|
|
const coolDownHours = process.env.NOTIFICATION_COOLDOWN_HOURS
|
|
|
|
if (!canSend) {
|
|
|
|
console.log(`Last Message Sent less than ${coolDownHours ? coolDownHours : 4} hours ago. Set NOTIFICATION_COOLDOWN_HOURS to change this`)
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log('RDrama Session Start')
|
2024-02-23 06:18:00 +00:00
|
|
|
// Initialize SessionManager or other global configurations
|
2024-03-02 07:41:11 +00:00
|
|
|
const rDramaSessionManager = rDramaSession.getInstance();
|
2024-02-23 06:18:00 +00:00
|
|
|
if (!process.env.RDRAMA_API_KEY) {
|
|
|
|
throw new Error('RDRAMA_API_KEY is undefined. Please set this environment variable.');
|
|
|
|
}
|
2024-03-02 07:41:11 +00:00
|
|
|
rDramaSessionManager.setAuthorizationToken(process.env.RDRAMA_API_KEY);
|
2024-02-23 06:18:00 +00:00
|
|
|
|
2024-02-27 05:11:00 +00:00
|
|
|
console.log('Database Maintenance Start')
|
2024-03-05 06:25:05 +00:00
|
|
|
const databaseMaintenance = new DatabaseMaintenanceService(databaseService)
|
2024-02-27 05:11:00 +00:00
|
|
|
await databaseMaintenance.runMaintenanceTasks()
|
2024-02-23 07:02:46 +00:00
|
|
|
|
2024-03-05 06:25:05 +00:00
|
|
|
console.log('Reddit Session Start')
|
2024-03-04 05:28:20 +00:00
|
|
|
await redditSession.getInstance(databaseService)
|
2024-03-02 07:41:11 +00:00
|
|
|
|
2024-02-23 06:18:00 +00:00
|
|
|
// Initialize services with any required dependencies
|
2024-02-24 06:20:01 +00:00
|
|
|
const commentFetcher = new CommentProcessor(databaseService);
|
2024-02-23 06:18:00 +00:00
|
|
|
const commentParser = new CommentParser();
|
2024-03-01 06:40:34 +00:00
|
|
|
const commentPoster = new CommentPoster()
|
|
|
|
const messageService = new MessageService();
|
2024-02-23 06:18:00 +00:00
|
|
|
|
|
|
|
// Initialize and start your workflow
|
2024-02-23 07:02:46 +00:00
|
|
|
const workflowOrchestrator = new WorkflowOrchestrator(
|
|
|
|
commentFetcher,
|
2024-03-01 06:40:34 +00:00
|
|
|
commentParser,
|
|
|
|
commentPoster,
|
|
|
|
messageService,
|
2024-03-05 06:25:05 +00:00
|
|
|
databaseService,
|
2024-02-23 07:02:46 +00:00
|
|
|
);
|
2024-02-23 06:18:00 +00:00
|
|
|
await workflowOrchestrator.executeWorkflow();
|
|
|
|
}
|
|
|
|
|
|
|
|
startApplication()
|
|
|
|
.then(() => console.log('Application started successfully.'))
|
|
|
|
.catch((error) => console.error('Application failed to start:', error));
|