basket-service/src/internal/app/ui/basket.go
Piotr Biernat 9c74b911c3
Some checks failed
continuous-integration/drone/push Build is failing
Refactoring
2022-12-25 23:19:24 +01:00

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
}