| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- const pddiktiService = require('../services/v2/pddikti.service')
- const waJobService = require('../services/waJob.service')
- const { processBatchUpdateSanksi } = require('../services/batchSanksi.service')
- const { logInfo, logError } = require('../utils/logger')
- let isWaWorkerRunning = false
- let isBatchWorkerRunning = false
- let waTimer = null
- let batchTimer = null
- const processWaJobs = async () => {
- if (isWaWorkerRunning) return
- isWaWorkerRunning = true
- try {
- const job = await waJobService.processNextJob()
- if (job) {
- logInfo('WA_WORKER', 'Processing job', { jobId: job._id, templateId: job.templateId })
- try {
- const response = await pddiktiService.whatsapp(
- job.templateId,
- job.contacts,
- job.body,
- job.buttons
- )
- await waJobService.markJobSuccess(job._id, response)
- } catch (error) {
- await waJobService.markJobFailed(job._id, error, job.attempt + 1)
- }
- }
- } catch (err) {
- logError('WA_WORKER', 'Error in worker tick', { error: err.message })
- } finally {
- isWaWorkerRunning = false
- }
- }
- const processBatchJobs = async () => {
- if (isBatchWorkerRunning) return
- isBatchWorkerRunning = true
- try {
- const { processed, error } = await processBatchUpdateSanksi()
- if (processed > 0) {
- logInfo('BATCH_WORKER', `Processed ${processed} batch items`, { errors: error.length })
- }
- } catch (err) {
- logError('BATCH_WORKER', 'Error in batch worker tick', { error: err.message })
- } finally {
- isBatchWorkerRunning = false
- }
- }
- const startWorker = (waIntervalMs = 3000, batchIntervalMs = 30000) => {
- logInfo('WORKER', `Starting Background Workers (WA: ${waIntervalMs}ms, Batch: ${batchIntervalMs}ms)`)
- waJobService.resetStuckJobs()
- waTimer = setInterval(processWaJobs, waIntervalMs)
- batchTimer = setInterval(processBatchJobs, batchIntervalMs)
- }
- const stopWorker = () => {
- if (waTimer) clearInterval(waTimer)
- if (batchTimer) clearInterval(batchTimer)
- logInfo('WORKER', 'Stopped Background Workers')
- }
- module.exports = {
- startWorker,
- stopWorker,
- }
|