diff --git a/internal/tender/handler.go b/internal/tender/handler.go index cf72e6e..e978418 100644 --- a/internal/tender/handler.go +++ b/internal/tender/handler.go @@ -401,7 +401,7 @@ func (h *TenderHandler) GetDocumentSummaries(c echo.Context) error { // @Param id path string true "Tender ID" // @Success 200 {object} response.APIResponse{data=TenderDocumentsResponse} // @Failure 400 {object} response.APIResponse -// @Failure 404 {object} response.APIResponse +// @Failure 404 {object} response.APIResponse "Tender not found" // @Failure 500 {object} response.APIResponse // @Router /api/v1/tenders/{id}/documents [get] func (h *TenderHandler) GetDocuments(c echo.Context) error { @@ -412,7 +412,10 @@ func (h *TenderHandler) GetDocuments(c echo.Context) error { documents, err := h.service.GetDocuments(c.Request().Context(), id) if err != nil { - return response.NotFound(c, "Tender documents not found") + if errors.Is(err, orm.ErrDocumentNotFound) { + return response.NotFound(c, "Tender not found") + } + return response.InternalServerError(c, "Failed to retrieve tender documents") } return response.Success(c, documents, "Tender documents retrieved successfully") diff --git a/internal/tender/service.go b/internal/tender/service.go index 23e9ada..eb118cd 100644 --- a/internal/tender/service.go +++ b/internal/tender/service.go @@ -346,9 +346,6 @@ func (s *tenderService) GetDocuments(ctx context.Context, id string) (*TenderDoc if id == "" { return nil, fmt.Errorf("tender ID cannot be empty") } - if s.aiSummarizerStorage == nil { - return nil, ErrTenderDocumentStorageUnavailable - } tender, err := s.repository.GetByID(ctx, id) if err != nil { @@ -358,25 +355,34 @@ 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{ + TenderID: id, + Documents: []TenderDocumentResponse{}, + } } + + if s.aiSummarizerStorage == nil { + s.logger.Debug("AI summarizer storage not configured; returning empty tender documents list", map[string]interface{}{ + "tender_id": id, + }) + return empty(), nil + } + if strings.TrimSpace(tender.ContractFolderID) == "" { - return nil, fmt.Errorf("tender has no contract folder id") - } - if strings.TrimSpace(tender.NoticePublicationID) == "" { - return nil, fmt.Errorf("tender notice publication ID is empty") + return empty(), nil } storedDocuments, err := s.listDocumentsForTender(ctx, tender) if err != nil { - s.logger.Error("Failed to list tender documents from storage", map[string]interface{}{ + s.logger.Warn("Listing tender documents failed; returning empty list", map[string]interface{}{ "tender_id": id, "contract_folder_id": tender.ContractFolderID, "notice_id": tender.NoticePublicationID, "error": err.Error(), }) - return nil, fmt.Errorf("failed to list tender documents: %w", err) + storedDocuments = nil } documents := make([]TenderDocumentResponse, 0, len(storedDocuments))