package ui import ( "context" "fmt" entity "git.pbiernat.io/egommerce/api-entities/http" "git.pbiernat.io/egommerce/api-entities/model" "git.pbiernat.io/egommerce/basket-service/internal/service" ) func AddProductToBasket(srv *service.BasketService, productID, qty int, basketID, reqID string) (*model.BasketModel, error) { // FIXME: error occurs when 0 is passed ctx := context.Background() basket, err := srv.FetchFromDB(ctx, basketID) if err != nil { srv.Log("Basket#:%s not found. Creating new one...", basketID) basket, err = srv.CreateBasket(ctx, basketID) if err != nil { ctx.Done() // FIXME srv.Log("Creating basket error: %v", err) return nil, err } } item, err := srv.FetchItem(ctx, basket.ID, productID) if err != nil { err := srv.AddItem(ctx, productID, basket.ID, qty) ctx.Done() // FIXME if err != nil { srv.Log("Error adding product to basket: %v", err) return nil, err } return basket, nil } err = srv.UpdateItem(ctx, item, item.Quantity+qty) if err != nil { srv.Log("UpdateItem error: %v", err) } ctx.Done() // FIXME return basket, nil } func RemoveProductFromBasket(srv *service.BasketService, productID, qty int, basketID, reqID string) (*model.BasketModel, error) { ctx := context.Background() basket, err := srv.FetchFromDB(ctx, basketID) if err != nil { ctx.Done() // FIXME return nil, err } item, err := srv.FetchItem(ctx, basket.ID, productID) if err != nil { fmt.Printf("FetchItem not found item in db: %v\n", err) ctx.Done() // FIXME return basket, err } if item.Quantity <= qty { err = srv.RemoveItem(ctx, item.ProductID, item.BasketID) if err != nil { ctx.Done() // FIXME return basket, err } } else { qty = item.Quantity - qty err = srv.UpdateItem(ctx, item, qty) if err != nil { srv.Log("UpdateItem error: %v", err) } } ctx.Done() // FIXME return basket, nil } func CheckoutBasket(srv *service.BasketService, basketID, reqID string) (*entity.BasketCheckoutResponse, error) { res := &entity.BasketCheckoutResponse{} basketID, err := srv.CheckoutBasket(reqID, basketID) if err != nil { return res, err } res.ID = basketID return res, nil }