Skip to content

Commit 4f25da7

Browse files
committed
cqrs: fix
1 parent f34cb96 commit 4f25da7

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

cqrs/bus/event_bus.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import (
1111
)
1212

1313
var (
14-
errEventBusUninitialized = errors.New("cqrs/bus: event bus is not initialized")
15-
errEventPublisherNil = errors.New("cqrs/bus: publisher is required")
16-
errEventMarshalerNil = errors.New("cqrs/bus: marshaler is required")
17-
errEventPayloadNil = errors.New("cqrs/bus: event is nil")
14+
errEventBusUninitialized = errors.New("cqrs/bus: event bus is not initialized")
15+
errEventPublisherNil = errors.New("cqrs/bus: publisher is required")
16+
errEventMarshalerNil = errors.New("cqrs/bus: marshaler is required")
17+
errEventPayloadNil = errors.New("cqrs/bus: event is nil")
18+
errEventPublishRequiresTx = errors.New("cqrs/bus: event publishing requires UoW transaction (use Publish inside UnitOfWork)")
1819
)
1920

2021
// EventBus publishes domain events.
@@ -59,16 +60,18 @@ func NewEventBusWithOptions(
5960
bus.forwarder = newForwarderState(cfg.outbox)
6061
bus.publisher = bus.forwarder.wrapPublisher(pub)
6162
}
63+
// When only WithTxAwareOutbox is set, pub may be nil; Publish without tx will return errEventPublishRequiresTx.
6264

6365
return bus, nil
6466
}
6567

6668
// validate checks that the event bus and its dependencies are properly initialized.
69+
// When only WithTxAwareOutbox is used (no forwarder), publisher may be nil.
6770
func (b *EventBus) validate(evt any) error {
6871
if b == nil {
6972
return errEventBusUninitialized
7073
}
71-
if b.publisher == nil {
74+
if b.publisher == nil && (b.txOutbox == nil || b.forwarder != nil) {
7275
return errEventPublisherNil
7376
}
7477
if b.marshaler == nil {
@@ -108,6 +111,9 @@ func (b *EventBus) Publish(ctx context.Context, evt any, opts ...PublishOption)
108111
}
109112
publisher = txPub
110113
}
114+
if publisher == nil {
115+
return errEventPublishRequiresTx
116+
}
111117
defer func() {
112118
if txPub != nil {
113119
if c, ok := txPub.(interface{ Close() error }); ok {

0 commit comments

Comments
 (0)