From 440b3c2fb796171be007a85a7517196678862dda Mon Sep 17 00:00:00 2001 From: jurabek Date: Mon, 15 Jan 2024 23:21:22 +0100 Subject: [PATCH] basket-api: error handling return 404 when customer cart does not exists --- src/backend/services/.DS_Store | Bin 10244 -> 10244 bytes src/backend/services/basket-api/go.mod | 1 + src/backend/services/basket-api/go.sum | 1 + .../internal/handlers/basket_handler.go | 7 ++++++- .../basket-api/internal/models/basket_item.go | 13 +++++++------ .../internal/repositories/redis_repository.go | 6 ++++++ 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/backend/services/.DS_Store b/src/backend/services/.DS_Store index 59f33470ac544e55c7df3a234508d78106f26eb8..be4be50d3200691f9ee02a341986c99ad706806b 100644 GIT binary patch delta 40 wcmZn(XbG6$&&aniU^hP_-(*K|sm*EvdF-2gBzCh;Y}m1xU7?qKvX4Xo01q4uO8@`> delta 333 zcmZn(XbG6$&nUDpU^hRb&}2t(smaU58#gZ(c*|DL!;s04!jQ_4$4~-fl`vE?=rJTR z6fk7wq#Fh&=jRqM00HyO;~)yB+T45>m!zEhB%m6O5Ra8FH%A@see9dr6?)kVa5{=c9smF$&{Jyw diff --git a/src/backend/services/basket-api/go.mod b/src/backend/services/basket-api/go.mod index 00c52408e..e2e0d9961 100644 --- a/src/backend/services/basket-api/go.mod +++ b/src/backend/services/basket-api/go.mod @@ -66,6 +66,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/swaggo/files v1.0.0 diff --git a/src/backend/services/basket-api/go.sum b/src/backend/services/basket-api/go.sum index 770198cb1..43c7d94e8 100644 --- a/src/backend/services/basket-api/go.sum +++ b/src/backend/services/basket-api/go.sum @@ -277,6 +277,7 @@ github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/src/backend/services/basket-api/internal/handlers/basket_handler.go b/src/backend/services/basket-api/internal/handlers/basket_handler.go index 84fb25e74..0057c8e48 100644 --- a/src/backend/services/basket-api/internal/handlers/basket_handler.go +++ b/src/backend/services/basket-api/internal/handlers/basket_handler.go @@ -6,6 +6,8 @@ import ( "github.com/gin-gonic/gin" "github.com/jurabek/basket.api/internal/models" + "github.com/jurabek/basket.api/internal/repositories" + "github.com/pkg/errors" ) type GetCreateDeleter interface { @@ -75,8 +77,11 @@ func (bc *BasketHandler) Get(c *gin.Context) { id := c.Param("id") result, err := bc.BasketRepository.Get(c.Request.Context(), id) - if err != nil { + if errors.Is(err, repositories.ErrCartNotFound) { + c.JSON(http.StatusNotFound, models.NewHTTPError(http.StatusNotFound, errors.Wrap(err, "itemID: "+id))) + return + } httpError := models.NewHTTPError(http.StatusBadRequest, err) c.JSON(http.StatusBadRequest, httpError) return diff --git a/src/backend/services/basket-api/internal/models/basket_item.go b/src/backend/services/basket-api/internal/models/basket_item.go index ccfba828b..d147106c1 100644 --- a/src/backend/services/basket-api/internal/models/basket_item.go +++ b/src/backend/services/basket-api/internal/models/basket_item.go @@ -2,10 +2,11 @@ package models // BasketItem items for users basket type BasketItem struct { - FoodID int `json:"food_id"` - UnitPrice float32 `json:"unit_price"` - OldUnitPrice float32 `json:"old_unit_price"` - Quantity int `json:"quantity"` - Picture string `json:"picture"` - FoodName string `json:"food_name"` + FoodID int `json:"food_id"` + UnitPrice float32 `json:"unit_price"` + OldUnitPrice float32 `json:"old_unit_price"` + Quantity int `json:"quantity"` + Picture string `json:"picture"` + FoodName string `json:"food_name"` + FoodDescription string `json:"food_description"` } diff --git a/src/backend/services/basket-api/internal/repositories/redis_repository.go b/src/backend/services/basket-api/internal/repositories/redis_repository.go index 304475336..3c471528e 100644 --- a/src/backend/services/basket-api/internal/repositories/redis_repository.go +++ b/src/backend/services/basket-api/internal/repositories/redis_repository.go @@ -3,6 +3,7 @@ package repositories import ( "context" "encoding/json" + "errors" "fmt" "github.com/jurabek/basket.api/internal/models" @@ -19,6 +20,8 @@ func NewRedisBasketRepository(client *redis.Client) *RedisBasketRepository { return &RedisBasketRepository{client: client} } +var ErrCartNotFound = errors.New("cart not found"); + // Get returns CustomerBasket otherwise nill func (r *RedisBasketRepository) Get(ctx context.Context, customerID string) (*models.CustomerBasket, error) { var ( @@ -27,6 +30,9 @@ func (r *RedisBasketRepository) Get(ctx context.Context, customerID string) (*mo ) data, err := r.client.Get(ctx, customerID).Bytes() if err != nil { + if(err == redis.Nil){ + return nil, ErrCartNotFound + } return nil, fmt.Errorf("error getting key %s: %v", customerID, err) }