Files
bl/common/utils/event/test_scenarios/factory-request-reply/cart/service.go

48 lines
1.3 KiB
Go
Raw Normal View History

package cart
import (
"context"
"fmt"
"strings"
"github.com/badu/bus"
"github.com/badu/bus/test_scenarios/factory-request-reply/events"
"github.com/badu/bus/test_scenarios/factory-request-reply/inventory"
"github.com/badu/bus/test_scenarios/factory-request-reply/prices"
)
type ServiceImpl struct {
sb *strings.Builder
}
func NewService(sb *strings.Builder) ServiceImpl {
result := ServiceImpl{sb: sb}
return result
}
func (s *ServiceImpl) AddProductToCart(ctx context.Context, productID string) error {
inventoryClientRequest := events.NewInventoryGRPCClientRequestEvent()
bus.Pub(inventoryClientRequest)
inventoryClientRequest.WaitReply()
pricesClientRequest := events.NewPricesGRPCClientRequestEvent()
bus.Pub(pricesClientRequest)
pricesClientRequest.WaitReply()
defer inventoryClientRequest.Conn.Close() // close GRPC connection when done
stockResponse, err := inventoryClientRequest.Client.GetStockForProduct(ctx, &inventory.ProductIDRequest{ID: productID})
if err != nil {
return err
}
defer pricesClientRequest.Conn.Close() // close GRPC connection when done
priceResponse, err := pricesClientRequest.Client.GetPricesForProduct(ctx, &prices.ProductIDRequest{ID: productID})
if err != nil {
return err
}
s.sb.WriteString(fmt.Sprintf("stock %0.2fpcs @ price %0.2f$\n", stockResponse.Stock, priceResponse.Price))
return nil
}