Fix summarizer worker infinite loop and map AI trigger errors to safe HTTP responses.

Paginate un-summarized tenders and mark rows missing notice/folder IDs as handled so the worker cannot spin forever. Return 400/404 for validation and not-found cases on AI summarize/analyze triggers instead of leaking internal errors as 500.
This commit is contained in:
Mazyar
2026-06-08 20:24:02 +03:30
parent 7d383c36c3
commit d07e1c9cf0
4 changed files with 64 additions and 13 deletions
+10 -1
View File
@@ -54,8 +54,9 @@ func (w *DocumentSummarizationWorker) Run() {
}
limit := 5
skip := 0
for {
tenders, totalCount, err := w.TenderRepo.GetUnSummarizedTenders(context.Background(), limit, 0)
tenders, totalCount, err := w.TenderRepo.GetUnSummarizedTenders(context.Background(), limit, skip)
if err != nil {
w.Logger.Error("Failed to get un-summarized tenders", map[string]interface{}{
"error": err.Error(),
@@ -66,6 +67,7 @@ func (w *DocumentSummarizationWorker) Run() {
w.Logger.Info("Found tenders for document summarization", map[string]interface{}{
"count": len(tenders),
"total_count": totalCount,
"skip": skip,
})
if len(tenders) == 0 {
@@ -80,6 +82,11 @@ func (w *DocumentSummarizationWorker) Run() {
})
w.summarizeTender(t)
}
skip += len(tenders)
if int64(skip) >= totalCount {
break
}
}
w.Logger.Info("Document summarization worker completed", map[string]interface{}{})
@@ -90,12 +97,14 @@ func (w *DocumentSummarizationWorker) summarizeTender(t *tender.Tender) {
w.Logger.Warn("Skipping tender summarization: missing notice_publication_id", map[string]interface{}{
"tender_id": t.ID.Hex(),
})
w.markTenderSummarized(t)
return
}
if strings.TrimSpace(t.ContractFolderID) == "" {
w.Logger.Warn("Skipping tender summarization: missing contract_folder_id", map[string]interface{}{
"tender_id": t.ID.Hex(),
})
w.markTenderSummarized(t)
return
}