basket-service/src/internal/ui/basket.go
2024-12-05 16:56:54 +01:00

91 lines
2.1 KiB
Go

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
}