feat(bot): add self-hosted scheduled dispatch support

Co-authored-by: claw <stanislavkalishin+claw@gmail.com>
This commit is contained in:
2026-03-30 15:27:15 +02:00
parent 94c1f48794
commit 575a68b3bb
13 changed files with 331 additions and 40 deletions

View File

@@ -1,4 +1,4 @@
import { and, asc, eq } from 'drizzle-orm'
import { and, asc, eq, lte } from 'drizzle-orm'
import { createDbClient, schema } from '@household/db'
import { instantFromDatabaseValue, instantToDate, nowInstant } from '@household/domain'
@@ -129,6 +129,26 @@ export function createDbScheduledDispatchRepository(databaseUrl: string): {
return rows.map(mapScheduledDispatch)
},
async listDueScheduledDispatches(input) {
const filters = [
eq(schema.scheduledDispatches.status, 'scheduled'),
lte(schema.scheduledDispatches.dueAt, instantToDate(input.dueBefore))
]
if (input.provider) {
filters.push(eq(schema.scheduledDispatches.provider, input.provider))
}
const rows = await db
.select(scheduledDispatchSelect())
.from(schema.scheduledDispatches)
.where(and(...filters))
.orderBy(asc(schema.scheduledDispatches.dueAt), asc(schema.scheduledDispatches.createdAt))
.limit(input.limit)
return rows.map(mapScheduledDispatch)
},
async updateScheduledDispatch(input) {
const updates: Record<string, unknown> = {
updatedAt: instantToDate(input.updatedAt)