freshyo/apps/backend/worker.ts
2026-04-03 21:00:02 +05:30

76 lines
1.8 KiB
TypeScript

import type {
ExecutionContext,
D1Database,
DurableObjectNamespace,
} from '@cloudflare/workers-types'
import { CacheCreator } from './src/jobs/cache-creator'
import { createApp } from './src/app'
import { ensureWorkerInit } from './src/lib/worker-init'
import {
handleNotifQueue,
handleOrderPlacedQueue,
handleOrderCancelledQueue,
} from './src/lib/queue-consumer'
export { CacheCreator }
export default {
async fetch(
request: Request,
env: Record<string, string> & {
DB?: D1Database
CACHE_CREATOR: DurableObjectNamespace
NOTIF_QUEUE: {
send: (message: unknown) => Promise<void>
}
ORDER_PLACED_QUEUE: {
send: (message: unknown) => Promise<void>
}
ORDER_CANCELLED_QUEUE: {
send: (message: unknown) => Promise<void>
}
},
ctx: ExecutionContext
) {
ensureWorkerInit(env)
const app = createApp()
return app.fetch(request, env, ctx)
},
async queue(
batch: any,
env: Record<string, string> & {
NOTIF_QUEUE: {
send: (message: unknown) => Promise<void>
}
ORDER_PLACED_QUEUE: {
send: (message: unknown) => Promise<void>
}
ORDER_CANCELLED_QUEUE: {
send: (message: unknown) => Promise<void>
}
DB?: D1Database
NOTIF_QUEUE_NAME: string
ORDER_PLACED_QUEUE_NAME: string
ORDER_CANCELLED_QUEUE_NAME: string
}
) {
ensureWorkerInit(env)
console.log('from the queue handler')
if (batch?.queue === env.NOTIF_QUEUE_NAME) {
handleNotifQueue(batch)
return
}
if (batch?.queue === env.ORDER_PLACED_QUEUE_NAME) {
await handleOrderPlacedQueue(batch)
return
}
if (batch?.queue === env.ORDER_CANCELLED_QUEUE_NAME) {
await handleOrderCancelledQueue(batch)
return
}
handleNotifQueue(batch)
},
}