89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package ui
|
|
|
|
import (
|
|
"context"
|
|
|
|
def "git.pbiernat.dev/egommerce/api-entities/http"
|
|
"git.pbiernat.dev/egommerce/api-entities/model"
|
|
"git.pbiernat.dev/egommerce/basket-service/internal/app/service"
|
|
)
|
|
|
|
func AddProductToBasket(srv *service.BasketService, productID, qty int, basketID, reqID string) (*model.BasketModel, error) {
|
|
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) (*def.BasketCheckoutResponse, error) {
|
|
// ctx := context.Background()
|
|
res := &def.BasketCheckoutResponse{}
|
|
basketID, err := srv.Checkout(reqID, basketID)
|
|
if err != nil {
|
|
return res, err
|
|
}
|
|
res.ID = basketID
|
|
// ctx.Done() // FIXME
|
|
|
|
return res, nil
|
|
}
|