From 48340d961dd78ee10ebc27d67e7d4789f554ea1d Mon Sep 17 00:00:00 2001 From: Mazyar Date: Tue, 2 Jun 2026 12:24:48 +0330 Subject: [PATCH] Improve error handling for tender retrieval by adding specific checks for "tender not found" in handler and service layers. --- internal/tender/handler.go | 9 +++++++++ internal/tender/service.go | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/internal/tender/handler.go b/internal/tender/handler.go index 69555f4..83863de 100644 --- a/internal/tender/handler.go +++ b/internal/tender/handler.go @@ -447,6 +447,9 @@ func (h *TenderHandler) GetDocuments(c echo.Context) error { if errors.Is(err, orm.ErrDocumentNotFound) { return response.NotFound(c, "Tender not found") } + if err.Error() == "tender not found" { + return response.NotFound(c, "Tender not found") + } return response.InternalServerError(c, "Failed to retrieve tender documents") } @@ -478,6 +481,9 @@ func (h *TenderHandler) DownloadDocuments(c echo.Context) error { download, err := h.service.DownloadDocuments(c.Request().Context(), id) if err != nil { + if err.Error() == "tender not found" { + return response.NotFound(c, "Tender not found") + } if errors.Is(err, ErrTenderDocumentNotFound) { return response.NotFound(c, "Tender documents not found") } @@ -502,6 +508,9 @@ func (h *TenderHandler) DownloadDocuments(c echo.Context) error { func (h *TenderHandler) streamDocumentDownload(c echo.Context, tenderID, filename string) error { download, err := h.service.DownloadDocument(c.Request().Context(), tenderID, filename) if err != nil { + if err.Error() == "tender not found" { + return response.NotFound(c, "Tender not found") + } if errors.Is(err, ErrTenderDocumentNotFound) { return response.NotFound(c, "Tender document not found") } diff --git a/internal/tender/service.go b/internal/tender/service.go index 730f5cd..8ea38e6 100644 --- a/internal/tender/service.go +++ b/internal/tender/service.go @@ -498,6 +498,9 @@ func (s *tenderService) GetDocuments(ctx context.Context, id string) (*TenderDoc }) return nil, fmt.Errorf("failed to get tender: %w", err) } + if tender == nil { + return nil, fmt.Errorf("tender not found") + } empty := func() *TenderDocumentsResponse { return &TenderDocumentsResponse{ @@ -1082,6 +1085,9 @@ func (s *tenderService) GetAISummary(ctx context.Context, id string) (*AISummary }) return nil, fmt.Errorf("failed to get tender: %w", err) } + if t == nil { + return nil, fmt.Errorf("tender not found") + } noticeID := strings.TrimSpace(t.NoticePublicationID) emptyResp := func(source string) *AISummaryResponse {