diff --git a/cmd/cart/pool-server.go b/cmd/cart/pool-server.go index 7f0e092..c2b1f1f 100644 --- a/cmd/cart/pool-server.go +++ b/cmd/cart/pool-server.go @@ -254,7 +254,14 @@ func (s *PoolServer) AddMultipleItemHandler(w http.ResponseWriter, r *http.Reque return err } - reply, err := s.ApplyLocal(r.Context(), id, getMultipleAddMessages(r.Context(), setCartItems.Items, setCartItems.Country)...) + msgs := getMultipleAddMessages(r.Context(), setCartItems.Items, setCartItems.Country) + + err = s.HandleReservations(r.Context(), id, msgs...) + if err != nil { + return err + } + + reply, err := s.ApplyLocal(r.Context(), id, msgs...) if err != nil { return err } @@ -274,11 +281,16 @@ func (s *PoolServer) GetReservationTime(item *messages.AddItem) time.Duration { //return nil } -func (s *PoolServer) HandleReservations(ctx context.Context, cartId cart.CartId, msgs ...*messages.AddItem) error { +func (s *PoolServer) HandleReservations(ctx context.Context, cartId cart.CartId, msgs ...proto.Message) error { if s.reservationService == nil { return nil } - for _, item := range msgs { + for _, msg := range msgs { + item, ok := msg.(*messages.AddItem) + if !ok { + log.Printf("not an AddItem message, skipping reservation, was of type: %T", msg) + continue + } timeout := s.GetReservationTime(item) if timeout == 0 { continue @@ -320,8 +332,9 @@ func (s *PoolServer) AddSkuRequestHandler(w http.ResponseWriter, r *http.Request if err != nil { return err } - if s.reservationService != nil { - + err = s.HandleReservations(r.Context(), id, msg) + if err != nil { + return err } reply, err := s.ApplyLocal(r.Context(), id, msg) if err != nil {