update cart
Build and Publish / BuildAndDeployArm64 (push) Failing after 5s
Build and Publish / BuildAndDeployAmd64 (push) Has been cancelled

This commit is contained in:
2026-06-17 14:16:25 +02:00
parent 11be8aec56
commit ad410d217c
11 changed files with 257 additions and 41 deletions
+25 -1
View File
@@ -18,6 +18,8 @@ import (
"git.k6n.net/mats/go-cart-actor/pkg/proxy"
"git.k6n.net/mats/go-cart-actor/pkg/voucher"
"git.k6n.net/mats/go-redis-inventory/pkg/inventory"
"git.k6n.net/mats/slask-finder/pkg/messaging"
amqp "github.com/rabbitmq/amqp091-go"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
@@ -153,7 +155,7 @@ func main() {
}),
)
diskStorage := actor.NewDiskStorage[cart.CartGrain]("data", reg)
diskStorage := actor.NewDiskStorage[cart.CartGrain](getEnv("CART_DIR", "data"), reg)
poolConfig := actor.GrainPoolConfig[cart.CartGrain]{
MutationRegistry: reg,
Storage: diskStorage,
@@ -215,6 +217,28 @@ func main() {
log.Fatalf("Error creating cart pool: %v\n", err)
}
// Publish each applied mutation to the "cart"/"mutation" RabbitMQ topic so the
// backoffice /commerce live feed (and other consumers) see cart activity.
// Best-effort: if AMQP is unreachable the cart still serves; the feed stays empty.
if amqpUrl != "" {
if conn, derr := amqp.Dial(amqpUrl); derr != nil {
log.Printf("cart: AMQP connect failed, mutation feed disabled: %v", derr)
} else {
if ch, cerr := conn.Channel(); cerr == nil {
_ = messaging.DefineTopic(ch, "cart", "mutation") // idempotent; non-fatal
_ = ch.Close()
}
pool.AddListener(actor.NewAmqpListener(conn, func(id uint64, results []actor.ApplyResult) (any, error) {
types := make([]string, 0, len(results))
for _, r := range results {
types = append(types, r.Type)
}
return map[string]any{"cartId": id, "mutations": types}, nil
}))
log.Printf("cart: mutation feed enabled (cart/mutation)")
}
}
syncedServer := NewPoolServer(pool, fmt.Sprintf("%s, %s", name, podIp)) //inventoryService, inventoryReservationService)
app := &App{
+1 -1
View File
@@ -186,7 +186,7 @@ func ToItemAddMessage(item *ProductItem, parent *ProductItem, storeId *string, q
// Top-level items price from their own product; children are priced from the
// parent product via the accessory-price hook.
price := int64(item.Price * 100)
price := int64(item.Price)
if parent != nil {
price = accessoryPrice(parent, item)
}