update stuff
This commit is contained in:
@@ -235,6 +235,19 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
|
|||||||
grainMutations.Inc()
|
grainMutations.Inc()
|
||||||
var err error
|
var err error
|
||||||
switch message.Type {
|
switch message.Type {
|
||||||
|
case SetCartItemsType:
|
||||||
|
msg, ok := message.Content.(*messages.SetCartItems)
|
||||||
|
if !ok {
|
||||||
|
err = fmt.Errorf("expected SetCartItems")
|
||||||
|
} else {
|
||||||
|
c.mu.Lock()
|
||||||
|
c.Items = make([]*CartItem, 0, len(msg.Items))
|
||||||
|
c.mu.Unlock()
|
||||||
|
for _, item := range msg.Items {
|
||||||
|
c.AddItem(item.Sku, int(item.Quantity))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
case AddRequestType:
|
case AddRequestType:
|
||||||
msg, ok := message.Content.(*messages.AddRequest)
|
msg, ok := message.Content.(*messages.AddRequest)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ var Handlers = map[uint16]MessageHandler{
|
|||||||
RemoveItemType: &RemoveItemHandler{},
|
RemoveItemType: &RemoveItemHandler{},
|
||||||
RemoveDeliveryType: &RemoveDeliveryHandler{},
|
RemoveDeliveryType: &RemoveDeliveryHandler{},
|
||||||
CreateCheckoutOrderType: &CheckoutHandler{},
|
CreateCheckoutOrderType: &CheckoutHandler{},
|
||||||
|
SetCartItemsType: &SetCartItemsHandler{},
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMessageHandler(t uint16) (MessageHandler, error) {
|
func GetMessageHandler(t uint16) (MessageHandler, error) {
|
||||||
@@ -35,6 +36,37 @@ type TypedMessageHandler struct {
|
|||||||
Type uint16
|
Type uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SetCartItemsHandler struct {
|
||||||
|
TypedMessageHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *SetCartItemsHandler) Write(m *Message, w io.Writer) error {
|
||||||
|
messageBytes, err := proto.Marshal(m.Content.(*messages.SetCartRequest))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
w.Write(messageBytes)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *SetCartItemsHandler) Read(data []byte) (interface{}, error) {
|
||||||
|
msg := &messages.SetCartRequest{}
|
||||||
|
|
||||||
|
err := proto.Unmarshal(data, msg)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return msg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *SetCartItemsHandler) Is(m *Message) bool {
|
||||||
|
if m.Type != AddRequestType {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
_, ok := m.Content.(*messages.SetCartRequest)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
type AddRequestHandler struct {
|
type AddRequestHandler struct {
|
||||||
TypedMessageHandler
|
TypedMessageHandler
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,4 +10,5 @@ const (
|
|||||||
SetDeliveryType = 7
|
SetDeliveryType = 7
|
||||||
SetPickupPointType = 8
|
SetPickupPointType = 8
|
||||||
CreateCheckoutOrderType = 9
|
CreateCheckoutOrderType = 9
|
||||||
|
SetCartItemsType = 10
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -182,6 +182,22 @@ func (s *PoolServer) HandleQuantityChange(w http.ResponseWriter, r *http.Request
|
|||||||
return s.WriteResult(w, reply)
|
return s.WriteResult(w, reply)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *PoolServer) HandleSetCartItems(w http.ResponseWriter, r *http.Request, id CartId) error {
|
||||||
|
setCartItems := messages.SetCartItems{}
|
||||||
|
err := json.NewDecoder(r.Body).Decode(&setCartItems)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
reply, err := s.pool.Process(id, Message{
|
||||||
|
Type: SetCartItemsType,
|
||||||
|
Content: &setCartItems,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return s.WriteResult(w, reply)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *PoolServer) HandleAddRequest(w http.ResponseWriter, r *http.Request, id CartId) error {
|
func (s *PoolServer) HandleAddRequest(w http.ResponseWriter, r *http.Request, id CartId) error {
|
||||||
addRequest := messages.AddRequest{}
|
addRequest := messages.AddRequest{}
|
||||||
err := json.NewDecoder(r.Body).Decode(&addRequest)
|
err := json.NewDecoder(r.Body).Decode(&addRequest)
|
||||||
@@ -291,6 +307,7 @@ func (s *PoolServer) Serve() *http.ServeMux {
|
|||||||
mux.HandleFunc("GET /", ErrorHandler(CookieCartIdHandler(s.HandleGet)))
|
mux.HandleFunc("GET /", ErrorHandler(CookieCartIdHandler(s.HandleGet)))
|
||||||
mux.HandleFunc("GET /add/{sku}", ErrorHandler(CookieCartIdHandler(s.HandleAddSku)))
|
mux.HandleFunc("GET /add/{sku}", ErrorHandler(CookieCartIdHandler(s.HandleAddSku)))
|
||||||
mux.HandleFunc("POST /", ErrorHandler(CookieCartIdHandler(s.HandleAddRequest)))
|
mux.HandleFunc("POST /", ErrorHandler(CookieCartIdHandler(s.HandleAddRequest)))
|
||||||
|
mux.HandleFunc("POST /set", ErrorHandler(CookieCartIdHandler(s.HandleSetCartItems)))
|
||||||
mux.HandleFunc("DELETE /{itemId}", ErrorHandler(CookieCartIdHandler(s.HandleDeleteItem)))
|
mux.HandleFunc("DELETE /{itemId}", ErrorHandler(CookieCartIdHandler(s.HandleDeleteItem)))
|
||||||
mux.HandleFunc("PUT /", ErrorHandler(CookieCartIdHandler(s.HandleQuantityChange)))
|
mux.HandleFunc("PUT /", ErrorHandler(CookieCartIdHandler(s.HandleQuantityChange)))
|
||||||
mux.HandleFunc("POST /delivery", ErrorHandler(CookieCartIdHandler(s.HandleSetDelivery)))
|
mux.HandleFunc("POST /delivery", ErrorHandler(CookieCartIdHandler(s.HandleSetDelivery)))
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ message AddRequest {
|
|||||||
string Sku = 2;
|
string Sku = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message SetCartRequest {
|
||||||
|
repeated AddRequest Items = 1;
|
||||||
|
}
|
||||||
|
|
||||||
message AddItem {
|
message AddItem {
|
||||||
int32 Quantity = 2;
|
int32 Quantity = 2;
|
||||||
int64 Price = 3;
|
int64 Price = 3;
|
||||||
|
|||||||
Reference in New Issue
Block a user