49 lines
1.6 KiB
Go
49 lines
1.6 KiB
Go
package cart
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
messages "git.k6n.net/go-cart-actor/pkg/messages"
|
|
)
|
|
|
|
// mutation_order_created.go
|
|
//
|
|
// Registers the OrderCreated mutation.
|
|
//
|
|
// This mutation represents the completion (or state transition) of an order
|
|
// initiated earlier via InitializeCheckout / external Klarna processing.
|
|
// It finalizes (or updates) the cart's order metadata.
|
|
//
|
|
// Behavior:
|
|
// - Validates payload non-nil and OrderId not empty.
|
|
// - Sets (or overwrites) OrderReference with the provided OrderId.
|
|
// - Sets PaymentStatus from payload.Status.
|
|
// - Marks PaymentInProgress = false (checkout flow finished / acknowledged).
|
|
// - Does NOT adjust monetary totals (no WithTotals()).
|
|
//
|
|
// Notes / Future Extensions:
|
|
// - If multiple order completion events can arrive (e.g., retries / webhook
|
|
// replays), this handler is idempotent: it simply overwrites fields.
|
|
// - If you need to guard against conflicting order IDs, add a check:
|
|
// if g.OrderReference != "" && g.OrderReference != m.OrderId { ... }
|
|
// - Add audit logging or metrics here if required.
|
|
//
|
|
// Concurrency:
|
|
// - Relies on the higher-level guarantee that Apply() calls are serialized
|
|
// per grain. If out-of-order events are possible, embed versioning or
|
|
// timestamps in the mutation and compare before applying changes.
|
|
|
|
func OrderCreated(g *CartGrain, m *messages.OrderCreated) error {
|
|
if m == nil {
|
|
return fmt.Errorf("OrderCreated: nil payload")
|
|
}
|
|
if m.OrderId == "" {
|
|
return fmt.Errorf("OrderCreated: missing orderId")
|
|
}
|
|
|
|
g.OrderReference = m.OrderId
|
|
//g.PaymentStatus = m.Status
|
|
//g.PaymentInProgress = false
|
|
return nil
|
|
}
|