CrossTalkPM/src/workflows/WorkflowOrchestrator.ts

65 lines
2.9 KiB
TypeScript

import { CommentFetcher } from "../rdrama/services/CommentFetcher";
import { CommentParser } from "../rdrama/services/CommentParser";
//import { Comment } from "../rdrama/models/Comment";
class WorkflowOrchestrator {
constructor(
private commentFetcher: CommentFetcher,
private commentParser: CommentParser,
//private databaseService: DatabaseService, // Responsible for DB operations
//private redditNotifier: RedditNotifier // Handles notifications to Reddit users
) {}
/**
* Executes the defined workflow for processing comments.
*/
async executeWorkflow() {
try {
// Fetch comments from the source
const comments = await this.commentFetcher.fetchComments();
console.log(`Fetched ${comments.length} comments`);
// Extract and deduplicate usernames from comments
const allUsernames = comments.flatMap(comment => this.commentParser.extractUsernames(comment));
const uniqueUsernames = [...new Set(allUsernames)];
console.log(`Extracted ${uniqueUsernames.length} unique usernames`);
//// Query user information based on usernames
//const userInfo = await this.databaseService.queryUsersInfo(uniqueUsernames);
//console.log(`Queried information for ${userInfo.length} users`);
//
//// Filter users who should be notified
//const usersToNotify = userInfo.filter(user => this.shouldNotifyUser(user));
//console.log(`Identified ${usersToNotify.length} users to notify`);
//
//// Notify users
//for (const user of usersToNotify) {
// await this.redditNotifier.notifyUser(user);
// console.log(`Notified user: ${user.username}`);
//}
console.log('Workflow executed successfully.');
} catch (error) {
console.error('An error occurred during workflow execution:', error);
}
}
/**
* Determines whether a user should be notified based on certain criteria.
*
* @param user - The user information object.
* @returns A boolean indicating whether the user should be notified.
*/
//private shouldNotifyUser(user: UserInfo): boolean {
// // Placeholder for the actual logic to determine if a user should be notified.
// // This could involve checking the last notification time against the current time,
// // user preferences, or other criteria defined in the business logic.
//
// // Example logic (to be replaced with actual implementation):
// const lastNotifiedTime = new Date(user.lastNotified); // Assuming 'lastNotified' is a Date or string.
// const notificationThreshold = 24 * 60 * 60 * 1000; // 24 hours in milliseconds.
// return (Date.now() - lastNotifiedTime.getTime()) > notificationThreshold;
//}
}
export default WorkflowOrchestrator;