mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 19:14:03 +00:00
feat(bot): add self-hosted scheduled dispatch support
Co-authored-by: claw <stanislavkalishin+claw@gmail.com>
This commit is contained in:
@@ -68,6 +68,19 @@ class ScheduledDispatchRepositoryStub implements ScheduledDispatchRepository {
|
||||
return [...this.dispatches.values()].filter((dispatch) => dispatch.householdId === householdId)
|
||||
}
|
||||
|
||||
async listDueScheduledDispatches(input: {
|
||||
dueBefore: Temporal.Instant
|
||||
provider?: ScheduledDispatchRecord['provider']
|
||||
limit: number
|
||||
}): Promise<readonly ScheduledDispatchRecord[]> {
|
||||
return [...this.dispatches.values()]
|
||||
.filter((dispatch) => dispatch.status === 'scheduled')
|
||||
.filter((dispatch) => dispatch.dueAt.epochMilliseconds <= input.dueBefore.epochMilliseconds)
|
||||
.filter((dispatch) => (input.provider ? dispatch.provider === input.provider : true))
|
||||
.sort((left, right) => left.dueAt.epochMilliseconds - right.dueAt.epochMilliseconds)
|
||||
.slice(0, input.limit)
|
||||
}
|
||||
|
||||
async updateScheduledDispatch(input: {
|
||||
dispatchId: string
|
||||
dueAt?: Temporal.Instant
|
||||
|
||||
@@ -86,6 +86,7 @@ export interface ScheduledDispatchService {
|
||||
cancelAdHocNotification(notificationId: string, cancelledAt?: Instant): Promise<void>
|
||||
reconcileHouseholdBuiltInDispatches(householdId: string, asOf?: Instant): Promise<void>
|
||||
reconcileAllBuiltInDispatches(asOf?: Instant): Promise<void>
|
||||
listDueDispatches(input?: { asOf?: Instant; limit?: number }): Promise<readonly ScheduledDispatchRecord[]>
|
||||
getDispatchById(dispatchId: string): Promise<ScheduledDispatchRecord | null>
|
||||
claimDispatch(dispatchId: string): Promise<boolean>
|
||||
releaseDispatch(dispatchId: string): Promise<void>
|
||||
@@ -307,6 +308,14 @@ export function createScheduledDispatchService(input: {
|
||||
}
|
||||
},
|
||||
|
||||
listDueDispatches(inputValue) {
|
||||
return input.repository.listDueScheduledDispatches({
|
||||
dueBefore: inputValue?.asOf ?? nowInstant(),
|
||||
provider: input.scheduler.provider,
|
||||
limit: inputValue?.limit ?? 25
|
||||
})
|
||||
},
|
||||
|
||||
getDispatchById(dispatchId) {
|
||||
return input.repository.getScheduledDispatchById(dispatchId)
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user