diff --git a/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/Mediator.kt b/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/Mediator.kt index 097c7c0..1bd31ef 100644 --- a/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/Mediator.kt +++ b/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/Mediator.kt @@ -15,4 +15,6 @@ interface Mediator { * @param T any [Notification] subclass to publish */ suspend fun publish(notification: T) + + suspend fun publish(notification: T, publishStrategy: PublishStrategy) } diff --git a/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorBuilder.kt b/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorBuilder.kt index 29a9364..cb395a4 100644 --- a/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorBuilder.kt +++ b/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorBuilder.kt @@ -3,7 +3,7 @@ package com.trendyol.kediatr class MediatorBuilder( private val dependencyProvider: DependencyProvider, ) { - internal var publishStrategy: PublishStrategy = StopOnExceptionPublishStrategy() + internal var defaultPublishStrategy: PublishStrategy = StopOnExceptionPublishStrategy() private set /** @@ -18,11 +18,11 @@ class MediatorBuilder( * @see [ParallelWhenAllPublishStrategy] */ fun withPublishStrategy(publishStrategy: PublishStrategy): MediatorBuilder { - this.publishStrategy = publishStrategy + this.defaultPublishStrategy = publishStrategy return this } fun build(registry: Registry = RegistryImpl(dependencyProvider)): Mediator { - return MediatorImpl(registry, publishStrategy) + return MediatorImpl(registry, defaultPublishStrategy) } } diff --git a/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorImpl.kt b/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorImpl.kt index b1ac53f..da538c8 100644 --- a/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorImpl.kt +++ b/project/kediatr-core/src/main/kotlin/com/trendyol/kediatr/MediatorImpl.kt @@ -2,7 +2,7 @@ package com.trendyol.kediatr class MediatorImpl( private val registry: Registry, - private val publishStrategy: PublishStrategy = StopOnExceptionPublishStrategy(), + private val defaultPublishStrategy: PublishStrategy = StopOnExceptionPublishStrategy(), ) : Mediator { override suspend fun , TResponse> send(query: TQuery): TResponse = processPipeline( @@ -26,7 +26,12 @@ class MediatorImpl( registry.resolveCommandWithResultHandler(command.javaClass).handle(command) } - override suspend fun publish(notification: T) = processPipeline( + override suspend fun publish(notification: T) = publish(notification, defaultPublishStrategy) + + override suspend fun publish( + notification: T, + publishStrategy: PublishStrategy, + ) = processPipeline( registry.getPipelineBehaviors(), notification ) { @@ -38,8 +43,8 @@ class MediatorImpl( request: TRequest, handler: RequestHandlerDelegate, ): TResponse = pipelineBehaviors - .reversed() - .fold(handler) { next, pipeline -> - { pipeline.handle(request) { next(it) } } - }(request) + .reversed() + .fold(handler) { next, pipeline -> + { pipeline.handle(request) { next(it) } } + }(request) } diff --git a/project/kediatr-core/src/test/kotlin/com/trendyol/kediatr/MediatorBuilderTest.kt b/project/kediatr-core/src/test/kotlin/com/trendyol/kediatr/MediatorBuilderTest.kt index ffd03eb..dd1f7ce 100644 --- a/project/kediatr-core/src/test/kotlin/com/trendyol/kediatr/MediatorBuilderTest.kt +++ b/project/kediatr-core/src/test/kotlin/com/trendyol/kediatr/MediatorBuilderTest.kt @@ -16,7 +16,7 @@ internal class MediatorBuilderTest { .withPublishStrategy(expectedStrategy) // Assert - assertEquals(expectedStrategy, builder.publishStrategy) + assertEquals(expectedStrategy, builder.defaultPublishStrategy) } companion object {