90 lines
2.1 KiB
Go
90 lines
2.1 KiB
Go
package ui
|
|
|
|
import (
|
|
"context"
|
|
|
|
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
|
|
}
|
|
|
|
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 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 {
|
|
ctx.Done() // FIXME
|
|
return nil, err
|
|
}
|
|
|
|
if item.Quantity <= qty {
|
|
err = srv.RemoveItem(ctx, item.ProductID, item.BasketID)
|
|
if err != nil {
|
|
ctx.Done() // FIXME
|
|
return nil, 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
|
|
}
|