waWorker.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const pddiktiService = require('../services/v2/pddikti.service')
  2. const waJobService = require('../services/waJob.service')
  3. const { logInfo, logError } = require('../utils/logger')
  4. let isRunning = false
  5. let timer = null
  6. const processJobs = async () => {
  7. if (isRunning) return
  8. isRunning = true
  9. try {
  10. const job = await waJobService.processNextJob()
  11. if (job) {
  12. logInfo('WA_WORKER', 'Processing job', { jobId: job._id, templateId: job.templateId })
  13. try {
  14. const response = await pddiktiService.whatsapp(
  15. job.templateId,
  16. job.contacts,
  17. job.body,
  18. job.buttons
  19. )
  20. await waJobService.markJobSuccess(job._id, response)
  21. } catch (error) {
  22. await waJobService.markJobFailed(job._id, error, job.attempt + 1)
  23. }
  24. }
  25. } catch (err) {
  26. logError('WA_WORKER', 'Error in worker tick', { error: err.message })
  27. } finally {
  28. isRunning = false
  29. }
  30. }
  31. const startWorker = (intervalMs = 3000) => {
  32. logInfo('WA_WORKER', `Starting WA Background Worker (interval: ${intervalMs}ms)`)
  33. waJobService.resetStuckJobs()
  34. timer = setInterval(processJobs, intervalMs)
  35. }
  36. const stopWorker = () => {
  37. if (timer) clearInterval(timer)
  38. logInfo('WA_WORKER', 'Stopped WA Background Worker')
  39. }
  40. module.exports = {
  41. startWorker,
  42. stopWorker,
  43. }