feedback error handling

This commit is contained in:
Mazyar
2026-05-31 01:47:28 +03:30
parent bca94cd69a
commit 970860a3d3
3 changed files with 31 additions and 10 deletions
+13 -6
View File
@@ -1,6 +1,7 @@
package feedback package feedback
import ( import (
"errors"
"tm/internal/customer" "tm/internal/customer"
"tm/internal/user" "tm/internal/user"
"tm/pkg/logger" "tm/pkg/logger"
@@ -97,10 +98,10 @@ func (h *Handler) Get(c echo.Context) error {
feedback, err := h.service.Get(c.Request().Context(), feedbackID) feedback, err := h.service.Get(c.Request().Context(), feedbackID)
if err != nil { if err != nil {
if err == ErrFeedbackNotFound { if errors.Is(err, ErrFeedbackNotFound) {
return response.NotFound(c, "Feedback not found") 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.NotFound(c, "Feedback has been deleted")
} }
return response.InternalServerError(c, "Failed to retrieve feedback") 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) feedback, err := h.service.Get(c.Request().Context(), feedbackID)
if err != nil { 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") 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) companyID, err := user.GetCompanyIDFromContext(c)
if err != nil { if err != nil || companyID == "" {
return response.BadRequest(c, "Company ID required", "User must be associated with a company") return response.Unauthorized(c, "User must be associated with a company")
} }
feedback, err := h.service.GetByTenderID(c.Request().Context(), tenderID, companyID) feedback, err := h.service.GetByTenderID(c.Request().Context(), tenderID, companyID)
if err != nil { 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") return response.Success(c, feedback, "Feedback retrieved successfully")
+10
View File
@@ -2,6 +2,7 @@ package feedback
import ( import (
"context" "context"
"errors"
"time" "time"
"tm/pkg/logger" "tm/pkg/logger"
orm "tm/pkg/mongo" 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) { func (r *feedbackRepository) GetByID(ctx context.Context, id string) (*Feedback, error) {
feedback, err := r.repo.FindByID(ctx, id) feedback, err := r.repo.FindByID(ctx, id)
if err != nil { if err != nil {
if errors.Is(err, orm.ErrDocumentNotFound) {
return nil, ErrFeedbackNotFound
}
r.logger.Error("Failed to get feedback by ID", map[string]interface{}{ r.logger.Error("Failed to get feedback by ID", map[string]interface{}{
"feedback_id": id, "feedback_id": id,
"error": err.Error(), "error": err.Error(),
@@ -129,6 +133,9 @@ func (r *feedbackRepository) GetByCompanyID(ctx context.Context, companyID strin
result, err := r.repo.FindOne(ctx, filter) result, err := r.repo.FindOne(ctx, filter)
if err != nil { 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{}{ r.logger.Error("Failed to get feedback by company ID and tender ID", map[string]interface{}{
"company_id": companyID, "company_id": companyID,
"tender_id": tenderID, "tender_id": tenderID,
@@ -146,6 +153,9 @@ func (r *feedbackRepository) GetByTenderID(ctx context.Context, tenderID, compan
result, err := r.repo.FindOne(ctx, filter) result, err := r.repo.FindOne(ctx, filter)
if err != nil { 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{}{ r.logger.Error("Failed to get feedback by tender ID and company ID", map[string]interface{}{
"tender_id": tenderID, "tender_id": tenderID,
"company_id": companyID, "company_id": companyID,
+4
View File
@@ -2,6 +2,7 @@ package feedback
import ( import (
"context" "context"
"errors"
"tm/internal/company" "tm/internal/company"
"tm/internal/tender" "tm/internal/tender"
"tm/pkg/logger" "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) { func (s *feedbackService) GetByTenderID(ctx context.Context, tenderID, companyID string) (*FeedbackResponse, error) {
feedback, err := s.feedbackRepo.GetByTenderID(ctx, tenderID, companyID) feedback, err := s.feedbackRepo.GetByTenderID(ctx, tenderID, companyID)
if err != nil { if err != nil {
if !errors.Is(err, ErrFeedbackNotFound) {
s.logger.Error("Failed to get feedback by tender ID", map[string]interface{}{ s.logger.Error("Failed to get feedback by tender ID", map[string]interface{}{
"tender_id": tenderID, "tender_id": tenderID,
"company_id": companyID,
"error": err.Error(), "error": err.Error(),
}) })
}
return nil, err return nil, err
} }