91 lines
2.4 KiB
JavaScript
91 lines
2.4 KiB
JavaScript
const cron = require("node-cron");
|
|
const PayoutService = require("../services/payoutService");
|
|
|
|
const paymentsSchedule = "0 * * * *"; // Run every hour at minute 0
|
|
const retrySchedule = "0 7 * * *"; // Retry failed payouts once daily at 7 AM
|
|
|
|
class PayoutProcessor {
|
|
static startScheduledPayouts() {
|
|
console.log("Starting automated payout processor...");
|
|
|
|
const payoutJob = cron.schedule(
|
|
paymentsSchedule,
|
|
async () => {
|
|
console.log("Running scheduled payout processing...");
|
|
|
|
try {
|
|
const results = await PayoutService.processAllEligiblePayouts();
|
|
|
|
if (results.totalProcessed > 0) {
|
|
console.log(
|
|
`Payout batch completed: ${results.successful.length} successful, ${results.failed.length} failed`
|
|
);
|
|
|
|
// Log any failures for monitoring
|
|
if (results.failed.length > 0) {
|
|
console.warn("Failed payouts:", results.failed);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error("Error in scheduled payout processing:", error);
|
|
}
|
|
},
|
|
{
|
|
scheduled: false,
|
|
timezone: "America/New_York",
|
|
}
|
|
);
|
|
|
|
const retryJob = cron.schedule(
|
|
retrySchedule,
|
|
async () => {
|
|
console.log("Running failed payout retry process...");
|
|
|
|
try {
|
|
const results = await PayoutService.retryFailedPayouts();
|
|
|
|
if (results.totalProcessed > 0) {
|
|
console.log(
|
|
`Retry batch completed: ${results.successful.length} successful, ${results.failed.length} still failed`
|
|
);
|
|
}
|
|
} catch (error) {
|
|
console.error("Error in retry payout processing:", error);
|
|
}
|
|
},
|
|
{
|
|
scheduled: false,
|
|
timezone: "America/New_York",
|
|
}
|
|
);
|
|
|
|
// Start the jobs
|
|
payoutJob.start();
|
|
retryJob.start();
|
|
|
|
console.log("Payout processor jobs scheduled:");
|
|
console.log("- Hourly payout processing: " + paymentsSchedule);
|
|
console.log("- Daily retry processing: " + retrySchedule);
|
|
|
|
return {
|
|
payoutJob,
|
|
retryJob,
|
|
|
|
stop() {
|
|
payoutJob.stop();
|
|
retryJob.stop();
|
|
console.log("Payout processor jobs stopped");
|
|
},
|
|
|
|
getStatus() {
|
|
return {
|
|
payoutJobRunning: payoutJob.getStatus() === "scheduled",
|
|
retryJobRunning: retryJob.getStatus() === "scheduled",
|
|
};
|
|
},
|
|
};
|
|
}
|
|
}
|
|
|
|
module.exports = PayoutProcessor;
|