import { Worker } from 'bullmq'; import { IngestJobData } from '@tower/types'; function parseRedisUrl(url: string) { const { hostname, port } = new URL(url); return { host: hostname, port: parseInt(port || '6379', 10), maxRetriesPerRequest: null }; } export async function processIngestJob(job: IngestJobData, prisma: any): Promise { await prisma.message.upsert({ where: { platform_platformMsgId: { platform: job.platform, platformMsgId: job.platformMsgId, }, }, create: { platform: job.platform, platformMsgId: job.platformMsgId, sourceGroupId: job.sourceGroupId, senderJid: job.senderJid, senderName: job.senderName, content: job.content, tags: job.tags, status: 'PENDING', }, update: {}, }); } export function createIngestWorker(redisUrl: string, prisma: any): Worker { return new Worker( 'tower:ingest', async (job) => processIngestJob(job.data, prisma), { connection: parseRedisUrl(redisUrl) }, ); }