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:
@@ -589,7 +589,7 @@ func (h *TenderHandler) TriggerAISummarize(c echo.Context) error {
|
||||
"tender_id": id,
|
||||
"error": err.Error(),
|
||||
})
|
||||
return response.InternalServerError(c, err.Error())
|
||||
return mapAITriggerHTTPError(c, err, "AI summarization")
|
||||
}
|
||||
|
||||
return response.Success(c, result, "AI summarization completed successfully")
|
||||
@@ -619,12 +619,28 @@ func (h *TenderHandler) TriggerAIAnalyze(c echo.Context) error {
|
||||
"tender_id": id,
|
||||
"error": err.Error(),
|
||||
})
|
||||
return response.InternalServerError(c, err.Error())
|
||||
return mapAITriggerHTTPError(c, err, "AI analysis")
|
||||
}
|
||||
|
||||
return response.Success(c, result, "AI analysis completed successfully")
|
||||
}
|
||||
|
||||
// mapAITriggerHTTPError maps AI trigger service errors to safe HTTP responses.
|
||||
func mapAITriggerHTTPError(c echo.Context, err error, action string) error {
|
||||
switch {
|
||||
case errors.Is(err, ErrEmptyTenderID), errors.Is(err, ErrInvalidTenderID):
|
||||
return response.BadRequest(c, "Invalid request", "Invalid tender ID")
|
||||
case errors.Is(err, ErrTenderNotFound), errors.Is(err, orm.ErrDocumentNotFound):
|
||||
return response.NotFound(c, "Tender not found")
|
||||
case errors.Is(err, ErrTenderMissingNoticeID), errors.Is(err, ErrTenderMissingContractFolderID):
|
||||
return response.BadRequest(c, "Tender not eligible", "Tender is missing required identifiers for AI processing")
|
||||
case errors.Is(err, ErrAINotConfigured):
|
||||
return response.InternalServerError(c, "AI service is not available")
|
||||
default:
|
||||
return response.InternalServerError(c, action+" failed")
|
||||
}
|
||||
}
|
||||
|
||||
// TriggerAITranslate triggers on-demand AI translation for a tender
|
||||
// @Summary Trigger AI translation
|
||||
// @Description Trigger on-demand AI translation for tender title and description (cached in MinIO by the AI service)
|
||||
|
||||
Reference in New Issue
Block a user