package main import ( "log/slog" "git.k6n.net/mats/go-cart-actor/pkg/flow" "git.k6n.net/mats/go-cart-actor/pkg/order" ) func buildFlowRegistry( applier *orderedApplier, provider order.PaymentProvider, inventoryReservations order.InventoryReservationService, emitPub order.Publisher, emailSender order.EmailSender, emailTemplates order.EmailTemplateStore, prefChecker order.EmailPreferenceChecker, logger *slog.Logger, ) *flow.Registry { freg := flow.NewRegistry() flow.RegisterBuiltinHooks(freg) order.RegisterFlowActions(freg, applier, provider, prefChecker) order.RegisterInventoryReservationActions(freg, applier, inventoryReservations) order.RegisterEmitHook(freg, emitPub) order.RegisterEmailHook(freg, applier, emailSender, emailTemplates, prefChecker) order.RegisterFulfillmentWebhookHook(freg, applier, nil) // emit_order_created is now handled by the applier's emitOnApply callback // under the applier's lock, which collapses the crash window. Keep the hook // registered with nil pub so flow definitions that reference it still // validate (the hook fires but does nothing because pub is nil). order.RegisterOrderCreatedEmit(freg, applier, nil, "order", "order") registerProjectFlowHooks(freg, applier, logger) return freg }