import Queue from 'bull' import { setQueues } from 'bull-board' const queue = Queue('queue', `redis://${process.env.REDIS_HOST}`) setQueues([queue]) export const cleanQueue = async () => { await queue.clean(0, 'delayed') await queue.clean(0, 'wait') await queue.clean(0, 'active') await queue.clean(0, 'completed') await queue.clean(0, 'failed') } export const getJobCounts = () => queue.getJobCounts() export const getActiveCounts = () => queue.getActiveCount() export const getWaitingCount = () => queue.getWaitingCount() // SEND NOTIFICATION export const SEND_NOTIFICATION_QUEUE_NAME = 'Send notification' export const addNotification = (data) => { return queue.add(SEND_NOTIFICATION_QUEUE_NAME, data, { attempts: 3, removeOnComplete: true, }) } // SEND POST export const SEND_POST_QUEUE_NAME = 'Send post' export function sendPost(postId, delayMS?) { if (!postId) { throw new Error(`Need post id to send the post`) } return queue.add(SEND_POST_QUEUE_NAME, postId, { attempts: 3, delay: delayMS || 0, removeOnComplete: true, }) } // HANDLE ZOOM WEBHOOK export const HANDLE_ZOOM_WEBHOOK_QUEUE_NAME = 'HANDLE_ZOOM_WEBHOOK_QUEUE_NAME' export function handleZoomWebhook(data) { return queue.add(HANDLE_ZOOM_WEBHOOK_QUEUE_NAME, data, { attempts: 5, removeOnComplete: true, }) } // CONDO MANAGER export type SyncCondoManagerInput = { projectId?: string managingCompanyId?: string } export const HANDLE_SYNC_CONDO_MANAGER_QUEUE_NAME = 'HANDLE_SYNC_CONDO_MANAGER_QUEUE_NAME' export function syncCondoManger(data: SyncCondoManagerInput) { return queue.add(HANDLE_SYNC_CONDO_MANAGER_QUEUE_NAME, data, { attempts: 1, removeOnComplete: true, }) } export const CREATE_SERVICE_PROJECT_FOR_SERVICE_QUEUE_NAME = 'CREATE_SERVICE_PROJECT_FOR_SERVICE_QUEUE_NAME' export function createServiceProjectsForService(serviceId: string) { return queue.add(CREATE_SERVICE_PROJECT_FOR_SERVICE_QUEUE_NAME, serviceId, { attempts: 1, removeOnComplete: true, }) }