From 0f134c295daa445faba6397c76ee40182695025a Mon Sep 17 00:00:00 2001 From: lc-spxl Date: Thu, 16 Oct 2025 11:20:30 +0200 Subject: [PATCH] allow to repeat tasks --- .../tasks/dialogue.tasks.handler.service.ts | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/apps/dialogue/src/tasks/dialogue.tasks.handler.service.ts b/apps/dialogue/src/tasks/dialogue.tasks.handler.service.ts index 99f0967..43cddf5 100644 --- a/apps/dialogue/src/tasks/dialogue.tasks.handler.service.ts +++ b/apps/dialogue/src/tasks/dialogue.tasks.handler.service.ts @@ -181,16 +181,24 @@ export class DialogueTasksHandlerService { await this.handleTask(ev); } - private async ensureRecord(sessionId: string, task: DialogueTaskDto) { + private async ensureRecord( + sessionId: string, + task: DialogueTaskDto, + forceNew = false, + ) { const recordQuery = { appId: task.appId, sessionId, taskId: task.taskId, }; - const records = await this.record.search(recordQuery); + + let records = await this.record.search(recordQuery); + records = records.sort((a, b) => + a.updated.getTime() < b.updated.getTime() ? 1 : -1, + ); let record: DialogueTaskRecordDto = records.length ? records[0] : undefined; - if (!record) { + if (!record || forceNew) { this.logger.debug(`Create new task record for sessionId=${sessionId}`); record = await this.record.save({ ...recordQuery, @@ -401,6 +409,16 @@ export class DialogueTasksHandlerService { let record = await this.ensureRecord(ev.sessionId, task); + if ( + record && + (record?.status === 'completed' || record.status === 'aborted') + ) { + this.logger.log( + `Repeating task=${task.name} after previous state=${record.status}`, + ); + record = await this.ensureRecord(ev.sessionId, task, true); + } + const started = Object.values(record.values).length === 0; if (started) {