From 970860a3d3da66e500db62d5a6b03c2ef96a2342 Mon Sep 17 00:00:00 2001 From: Mazyar Date: Sun, 31 May 2026 01:47:28 +0330 Subject: [PATCH] feedback error handling --- internal/feedback/handler.go | 19 +++++++++++++------ internal/feedback/repository.go | 10 ++++++++++ internal/feedback/service.go | 12 ++++++++---- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/internal/feedback/handler.go b/internal/feedback/handler.go index f1e8d32..ef92162 100644 --- a/internal/feedback/handler.go +++ b/internal/feedback/handler.go @@ -1,6 +1,7 @@ package feedback import ( + "errors" "tm/internal/customer" "tm/internal/user" "tm/pkg/logger" @@ -97,10 +98,10 @@ func (h *Handler) Get(c echo.Context) error { feedback, err := h.service.Get(c.Request().Context(), feedbackID) if err != nil { - if err == ErrFeedbackNotFound { + if errors.Is(err, ErrFeedbackNotFound) { return response.NotFound(c, "Feedback not found") } - if err == ErrFeedbackDeleted { + if errors.Is(err, ErrFeedbackDeleted) { return response.NotFound(c, "Feedback has been deleted") } return response.InternalServerError(c, "Failed to retrieve feedback") @@ -262,7 +263,10 @@ func (h *Handler) PublicGet(c echo.Context) error { feedback, err := h.service.Get(c.Request().Context(), feedbackID) if err != nil { - return response.BadRequest(c, "Failed to get feedback", "") + if errors.Is(err, ErrFeedbackNotFound) { + return response.NotFound(c, "Feedback not found") + } + return response.InternalServerError(c, "Failed to get feedback") } return response.Success(c, feedback, "Feedback retrieved successfully") @@ -288,13 +292,16 @@ func (h *Handler) PublicGetByTenderID(c echo.Context) error { } companyID, err := user.GetCompanyIDFromContext(c) - if err != nil { - return response.BadRequest(c, "Company ID required", "User must be associated with a company") + if err != nil || companyID == "" { + return response.Unauthorized(c, "User must be associated with a company") } feedback, err := h.service.GetByTenderID(c.Request().Context(), tenderID, companyID) if err != nil { - return response.BadRequest(c, "Failed to get feedback", "") + if errors.Is(err, ErrFeedbackNotFound) { + return response.NotFound(c, "Feedback not found") + } + return response.InternalServerError(c, "Failed to get feedback") } return response.Success(c, feedback, "Feedback retrieved successfully") diff --git a/internal/feedback/repository.go b/internal/feedback/repository.go index 321d138..aaed2a2 100644 --- a/internal/feedback/repository.go +++ b/internal/feedback/repository.go @@ -2,6 +2,7 @@ package feedback import ( "context" + "errors" "time" "tm/pkg/logger" orm "tm/pkg/mongo" @@ -113,6 +114,9 @@ func (r *feedbackRepository) Update(ctx context.Context, feedback *Feedback) err func (r *feedbackRepository) GetByID(ctx context.Context, id string) (*Feedback, error) { feedback, err := r.repo.FindByID(ctx, id) if err != nil { + if errors.Is(err, orm.ErrDocumentNotFound) { + return nil, ErrFeedbackNotFound + } r.logger.Error("Failed to get feedback by ID", map[string]interface{}{ "feedback_id": id, "error": err.Error(), @@ -129,6 +133,9 @@ func (r *feedbackRepository) GetByCompanyID(ctx context.Context, companyID strin result, err := r.repo.FindOne(ctx, filter) if err != nil { + if errors.Is(err, orm.ErrDocumentNotFound) { + return nil, ErrFeedbackNotFound + } r.logger.Error("Failed to get feedback by company ID and tender ID", map[string]interface{}{ "company_id": companyID, "tender_id": tenderID, @@ -146,6 +153,9 @@ func (r *feedbackRepository) GetByTenderID(ctx context.Context, tenderID, compan result, err := r.repo.FindOne(ctx, filter) if err != nil { + if errors.Is(err, orm.ErrDocumentNotFound) { + return nil, ErrFeedbackNotFound + } r.logger.Error("Failed to get feedback by tender ID and company ID", map[string]interface{}{ "tender_id": tenderID, "company_id": companyID, diff --git a/internal/feedback/service.go b/internal/feedback/service.go index d17a6c5..6ec4643 100644 --- a/internal/feedback/service.go +++ b/internal/feedback/service.go @@ -2,6 +2,7 @@ package feedback import ( "context" + "errors" "tm/internal/company" "tm/internal/tender" "tm/pkg/logger" @@ -165,10 +166,13 @@ func (s *feedbackService) Delete(ctx context.Context, id string) error { func (s *feedbackService) GetByTenderID(ctx context.Context, tenderID, companyID string) (*FeedbackResponse, error) { feedback, err := s.feedbackRepo.GetByTenderID(ctx, tenderID, companyID) if err != nil { - s.logger.Error("Failed to get feedback by tender ID", map[string]interface{}{ - "tender_id": tenderID, - "error": err.Error(), - }) + if !errors.Is(err, ErrFeedbackNotFound) { + s.logger.Error("Failed to get feedback by tender ID", map[string]interface{}{ + "tender_id": tenderID, + "company_id": companyID, + "error": err.Error(), + }) + } return nil, err }