clear cart cookies
Some checks failed
Build and Publish / BuildAndDeploy (push) Successful in 3m8s
Build and Publish / BuildAndDeployAmd64 (push) Has been cancelled

This commit is contained in:
matst80
2025-04-18 18:14:11 +02:00
parent 86141c565a
commit 8f10b58d94
2 changed files with 133 additions and 118 deletions

View File

@@ -243,21 +243,21 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
if !ok { if !ok {
err = fmt.Errorf("expected SetCartItems") err = fmt.Errorf("expected SetCartItems")
} else { } else {
if !c.PaymentInProgress {
c.mu.Lock() c.mu.Lock()
c.Items = make([]*CartItem, 0, len(msg.Items)) c.Items = make([]*CartItem, 0, len(msg.Items))
c.mu.Unlock() c.mu.Unlock()
for _, item := range msg.Items { for _, item := range msg.Items {
c.AddItem(item.Sku, int(item.Quantity)) 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 {
err = fmt.Errorf("expected AddRequest") err = fmt.Errorf("expected AddRequest")
} else { } else {
if !c.PaymentInProgress {
existingItem, found := c.FindItemWithSku(msg.Sku) existingItem, found := c.FindItemWithSku(msg.Sku)
if found { if found {
existingItem.Quantity += int(msg.Quantity) existingItem.Quantity += int(msg.Quantity)
@@ -265,14 +265,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
} else { } else {
return c.AddItem(msg.Sku, int(msg.Quantity)) // extent AddRequest to include quantity return c.AddItem(msg.Sku, int(msg.Quantity)) // extent AddRequest to include quantity
} }
}
} }
case AddItemType: case AddItemType:
msg, ok := message.Content.(*messages.AddItem) msg, ok := message.Content.(*messages.AddItem)
if !ok { if !ok {
err = fmt.Errorf("expected AddItem") err = fmt.Errorf("expected AddItem")
} else { } else {
if !c.PaymentInProgress {
if msg.Quantity < 1 { if msg.Quantity < 1 {
return nil, fmt.Errorf("invalid quantity") return nil, fmt.Errorf("invalid quantity")
} }
@@ -304,14 +304,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
c.TotalPrice += msg.Price * int64(msg.Quantity) c.TotalPrice += msg.Price * int64(msg.Quantity)
c.mu.Unlock() c.mu.Unlock()
} }
}
} }
case ChangeQuantityType: case ChangeQuantityType:
msg, ok := message.Content.(*messages.ChangeQuantity) msg, ok := message.Content.(*messages.ChangeQuantity)
if !ok { if !ok {
err = fmt.Errorf("expected ChangeQuantity") err = fmt.Errorf("expected ChangeQuantity")
} else { } else {
if !c.PaymentInProgress {
for i, item := range c.Items { for i, item := range c.Items {
if item.Id == int(msg.Id) { if item.Id == int(msg.Id) {
if msg.Quantity <= 0 { if msg.Quantity <= 0 {
@@ -326,14 +326,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
break break
} }
} }
}
} }
case RemoveItemType: case RemoveItemType:
msg, ok := message.Content.(*messages.RemoveItem) msg, ok := message.Content.(*messages.RemoveItem)
if !ok { if !ok {
err = fmt.Errorf("expected RemoveItem") err = fmt.Errorf("expected RemoveItem")
} else { } else {
if !c.PaymentInProgress {
items := make([]*CartItem, 0, len(c.Items)) items := make([]*CartItem, 0, len(c.Items))
for _, item := range c.Items { for _, item := range c.Items {
if item.Id == int(msg.Id) { if item.Id == int(msg.Id) {
@@ -343,14 +343,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
} }
} }
c.Items = items c.Items = items
}
} }
case SetDeliveryType: case SetDeliveryType:
msg, ok := message.Content.(*messages.SetDelivery) msg, ok := message.Content.(*messages.SetDelivery)
if !ok { if !ok {
err = fmt.Errorf("expected SetDelivery") err = fmt.Errorf("expected SetDelivery")
} else { } else {
if !c.PaymentInProgress {
c.lastDeliveryId++ c.lastDeliveryId++
items := make([]int, 0) items := make([]int, 0)
withDelivery := c.ItemsWithDelivery() withDelivery := c.ItemsWithDelivery()
@@ -383,14 +383,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
c.Processing = false c.Processing = false
}() }()
} }
}
} }
case RemoveDeliveryType: case RemoveDeliveryType:
msg, ok := message.Content.(*messages.RemoveDelivery) msg, ok := message.Content.(*messages.RemoveDelivery)
if !ok { if !ok {
err = fmt.Errorf("expected RemoveDelivery") err = fmt.Errorf("expected RemoveDelivery")
} else { } else {
if !c.PaymentInProgress {
deliveries := make([]*CartDelivery, 0, len(c.Deliveries)) deliveries := make([]*CartDelivery, 0, len(c.Deliveries))
for _, delivery := range c.Deliveries { for _, delivery := range c.Deliveries {
if delivery.Id == int(msg.Id) { if delivery.Id == int(msg.Id) {
@@ -400,14 +400,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
} }
} }
c.Deliveries = deliveries c.Deliveries = deliveries
}
} }
case SetPickupPointType: case SetPickupPointType:
msg, ok := message.Content.(*messages.SetPickupPoint) msg, ok := message.Content.(*messages.SetPickupPoint)
if !ok { if !ok {
err = fmt.Errorf("expected SetPickupPoint") err = fmt.Errorf("expected SetPickupPoint")
} else { } else {
if !c.PaymentInProgress {
for _, delivery := range c.Deliveries { for _, delivery := range c.Deliveries {
if delivery.Id == int(msg.DeliveryId) { if delivery.Id == int(msg.DeliveryId) {
delivery.PickupPoint = &messages.PickupPoint{ delivery.PickupPoint = &messages.PickupPoint{
@@ -421,13 +421,14 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa
break break
} }
} }
}
} }
case CreateCheckoutOrderType: case CreateCheckoutOrderType:
msg, ok := message.Content.(*messages.CreateCheckoutOrder) msg, ok := message.Content.(*messages.CreateCheckoutOrder)
if !ok { if !ok {
err = fmt.Errorf("expected CreateCheckoutOrder") err = fmt.Errorf("expected CreateCheckoutOrder")
} else { } else {
orderLines := make([]*klarna.Line, 0, len(c.Items)) orderLines := make([]*klarna.Line, 0, len(c.Items))
totalTax := 0 totalTax := 0
c.PaymentInProgress = true c.PaymentInProgress = true

View File

@@ -31,6 +31,7 @@ func (s *PoolServer) HandleGet(w http.ResponseWriter, r *http.Request, id CartId
if err != nil { if err != nil {
return err return err
} }
return s.WriteResult(w, data) return s.WriteResult(w, data)
} }
@@ -316,6 +317,18 @@ func CookieCartIdHandler(fn func(w http.ResponseWriter, r *http.Request, cartId
} }
} }
func (s *PoolServer) RemoveCartCookie(w http.ResponseWriter, r *http.Request, cartId CartId) error {
cartId = NewCartId()
http.SetCookie(w, &http.Cookie{
Name: "cartid",
Value: cartId.String(),
Path: "/",
SameSite: http.SameSiteLaxMode,
})
w.WriteHeader(http.StatusOK)
return nil
}
func CartIdHandler(fn func(w http.ResponseWriter, r *http.Request, cartId CartId) error) func(w http.ResponseWriter, r *http.Request) error { func CartIdHandler(fn func(w http.ResponseWriter, r *http.Request, cartId CartId) error) func(w http.ResponseWriter, r *http.Request) error {
return func(w http.ResponseWriter, r *http.Request) error { return func(w http.ResponseWriter, r *http.Request) error {
cartId := ToCartId(r.PathValue("id")) cartId := ToCartId(r.PathValue("id"))
@@ -339,6 +352,7 @@ func (s *PoolServer) Serve() *http.ServeMux {
mux.HandleFunc("POST /set", ErrorHandler(CookieCartIdHandler(s.HandleSetCartItems))) 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("DELETE /", ErrorHandler(CookieCartIdHandler(s.RemoveCartCookie)))
mux.HandleFunc("POST /delivery", ErrorHandler(CookieCartIdHandler(s.HandleSetDelivery))) mux.HandleFunc("POST /delivery", ErrorHandler(CookieCartIdHandler(s.HandleSetDelivery)))
mux.HandleFunc("DELETE /delivery/{deliveryId}", ErrorHandler(CookieCartIdHandler(s.HandleRemoveDelivery))) mux.HandleFunc("DELETE /delivery/{deliveryId}", ErrorHandler(CookieCartIdHandler(s.HandleRemoveDelivery)))
mux.HandleFunc("PUT /delivery/{deliveryId}/pickupPoint", ErrorHandler(CookieCartIdHandler(s.HandleSetPickupPoint))) mux.HandleFunc("PUT /delivery/{deliveryId}/pickupPoint", ErrorHandler(CookieCartIdHandler(s.HandleSetPickupPoint)))