From 5b394209bcaedba9d574876564a217551aeacf8d Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Sat, 7 Oct 2023 18:08:03 +0900 Subject: [PATCH 1/7] [issue-1] refactor: add transaction trace log --- api/infra/src/main/resources/application-local.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/api/infra/src/main/resources/application-local.properties b/api/infra/src/main/resources/application-local.properties index 967483f..e192fac 100644 --- a/api/infra/src/main/resources/application-local.properties +++ b/api/infra/src/main/resources/application-local.properties @@ -7,5 +7,6 @@ application.url=http://localhost:80 #logging.level.io.r2dbc=DEBUG #logging.level.org.springframework.data.r2dbc=DEBUG +#logging.level.org.springframework.transaction=TRACE logging.level.org.springframework.r2dbc.core=debug From 8af5a13a21c04b4630393788f76df0ca7f3395b5 Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Sat, 7 Oct 2023 18:09:49 +0900 Subject: [PATCH 2/7] [issue-23] refactor: change transaction bean 'javax' to 'springframework' --- api/domain/build.gradle.kts | 3 ++- .../kotlin/linkpool/link/folder/service/CreateFolderService.kt | 2 +- .../kotlin/linkpool/link/folder/service/DeleteFolderService.kt | 2 +- .../kotlin/linkpool/link/folder/service/UpdateFolderService.kt | 2 +- .../linkpool/link/folder/service/WithdrawalFolderService.kt | 2 +- .../link/folderlink/service/CreateFolderLinkBulkService.kt | 2 +- .../link/folderlink/service/DeleteFolderLinkService.kt | 2 +- .../kotlin/linkpool/link/link/service/CreateLinkService.kt | 2 +- .../kotlin/linkpool/link/link/service/DeleteLinkService.kt | 2 +- .../main/kotlin/linkpool/link/link/service/GetLinksService.kt | 2 +- .../kotlin/linkpool/link/link/service/UpdateLinkService.kt | 2 +- .../linkpool/report/report/service/CreateReportService.kt | 2 +- .../kotlin/linkpool/report/report/service/GetReportService.kt | 2 +- .../linkpool/user/jobgroup/service/JobGroupQueryService.kt | 2 +- .../kotlin/linkpool/user/user/service/CreateUserService.kt | 2 +- .../main/kotlin/linkpool/user/user/service/GetUserService.kt | 2 +- .../kotlin/linkpool/user/user/service/UpdateUserService.kt | 2 +- 17 files changed, 18 insertions(+), 17 deletions(-) diff --git a/api/domain/build.gradle.kts b/api/domain/build.gradle.kts index 499fe4f..86419de 100644 --- a/api/domain/build.gradle.kts +++ b/api/domain/build.gradle.kts @@ -4,8 +4,9 @@ plugins { allOpen { annotation("javax.transaction.Transactional") + annotation("org.springframework.transaction.annotation.Transactional") } dependencies { - implementation(group = "org.jboss.spec.javax.transaction", name = "jboss-transaction-api_1.2_spec", version = "2.0.0.CR1") + implementation("org.springframework:spring-tx:5.3.27") } diff --git a/api/domain/src/main/kotlin/linkpool/link/folder/service/CreateFolderService.kt b/api/domain/src/main/kotlin/linkpool/link/folder/service/CreateFolderService.kt index f67fa4c..376d79d 100644 --- a/api/domain/src/main/kotlin/linkpool/link/folder/service/CreateFolderService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/folder/service/CreateFolderService.kt @@ -7,7 +7,7 @@ import linkpool.link.folder.port.`in`.CreateFolderUseCase import linkpool.link.folder.port.`in`.SaveFolderRequest import linkpool.link.folder.port.out.FolderPort import java.time.LocalDateTime -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/folder/service/DeleteFolderService.kt b/api/domain/src/main/kotlin/linkpool/link/folder/service/DeleteFolderService.kt index 3a20649..20b1189 100644 --- a/api/domain/src/main/kotlin/linkpool/link/folder/service/DeleteFolderService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/folder/service/DeleteFolderService.kt @@ -4,7 +4,7 @@ import linkpool.common.DomainComponent import linkpool.exception.NotAuthorizedForDataException import linkpool.link.folder.port.`in`.DeleteFolderUseCase import linkpool.link.folder.port.out.FolderPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/folder/service/UpdateFolderService.kt b/api/domain/src/main/kotlin/linkpool/link/folder/service/UpdateFolderService.kt index 76214eb..873f47d 100644 --- a/api/domain/src/main/kotlin/linkpool/link/folder/service/UpdateFolderService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/folder/service/UpdateFolderService.kt @@ -5,7 +5,7 @@ import linkpool.exception.NotAuthorizedForDataException import linkpool.link.folder.port.`in`.UpdateFolderRequest import linkpool.link.folder.port.`in`.UpdateFolderUseCase import linkpool.link.folder.port.out.FolderPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/folder/service/WithdrawalFolderService.kt b/api/domain/src/main/kotlin/linkpool/link/folder/service/WithdrawalFolderService.kt index 5075e33..63b75ad 100644 --- a/api/domain/src/main/kotlin/linkpool/link/folder/service/WithdrawalFolderService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/folder/service/WithdrawalFolderService.kt @@ -4,7 +4,7 @@ import linkpool.common.DomainComponent import linkpool.link.folder.port.`in`.WithdrawalFolderUseCase import linkpool.link.folder.port.out.FolderPort import linkpool.user.user.model.UserSignedOutEvent -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/folderlink/service/CreateFolderLinkBulkService.kt b/api/domain/src/main/kotlin/linkpool/link/folderlink/service/CreateFolderLinkBulkService.kt index ccf8a9d..86456a5 100644 --- a/api/domain/src/main/kotlin/linkpool/link/folderlink/service/CreateFolderLinkBulkService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/folderlink/service/CreateFolderLinkBulkService.kt @@ -7,7 +7,7 @@ import linkpool.link.folderlink.port.`in`.BulkCreateRequest import linkpool.link.folderlink.port.`in`.CreateFolderLinkBulkUseCase import linkpool.link.link.port.`in`.CreateLinkUseCase import linkpool.link.link.port.`in`.SaveLinkRequest -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/folderlink/service/DeleteFolderLinkService.kt b/api/domain/src/main/kotlin/linkpool/link/folderlink/service/DeleteFolderLinkService.kt index ad4a0dd..ecfcf6f 100644 --- a/api/domain/src/main/kotlin/linkpool/link/folderlink/service/DeleteFolderLinkService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/folderlink/service/DeleteFolderLinkService.kt @@ -5,7 +5,7 @@ import linkpool.exception.NotAuthorizedForDataException import linkpool.link.folder.port.`in`.DeleteFolderUseCase import linkpool.link.folder.port.out.FolderPort import linkpool.link.folderlink.port.`in`.DeleteFolderLinkUseCase -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/link/service/CreateLinkService.kt b/api/domain/src/main/kotlin/linkpool/link/link/service/CreateLinkService.kt index b3979b1..e8e60a0 100644 --- a/api/domain/src/main/kotlin/linkpool/link/link/service/CreateLinkService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/link/service/CreateLinkService.kt @@ -7,7 +7,7 @@ import linkpool.link.link.port.`in`.CreateLinkUseCase import linkpool.link.link.port.`in`.SaveLinkRequest import linkpool.link.link.port.out.LinkPort import java.time.LocalDateTime -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/link/service/DeleteLinkService.kt b/api/domain/src/main/kotlin/linkpool/link/link/service/DeleteLinkService.kt index c71a21a..fc200f4 100644 --- a/api/domain/src/main/kotlin/linkpool/link/link/service/DeleteLinkService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/link/service/DeleteLinkService.kt @@ -5,7 +5,7 @@ import linkpool.exception.DataNotFoundException import linkpool.exception.NotAuthorizedForDataException import linkpool.link.link.port.`in`.DeleteLinkUseCase import linkpool.link.link.port.out.LinkPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/link/service/GetLinksService.kt b/api/domain/src/main/kotlin/linkpool/link/link/service/GetLinksService.kt index 02496b0..7b6c986 100644 --- a/api/domain/src/main/kotlin/linkpool/link/link/service/GetLinksService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/link/service/GetLinksService.kt @@ -6,7 +6,7 @@ import linkpool.common.DomainComponent import linkpool.link.link.model.Link import linkpool.link.link.port.`in`.GetLinksUseCase import linkpool.link.link.port.out.LinkPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/link/link/service/UpdateLinkService.kt b/api/domain/src/main/kotlin/linkpool/link/link/service/UpdateLinkService.kt index 7d13813..c9b5621 100644 --- a/api/domain/src/main/kotlin/linkpool/link/link/service/UpdateLinkService.kt +++ b/api/domain/src/main/kotlin/linkpool/link/link/service/UpdateLinkService.kt @@ -6,7 +6,7 @@ import linkpool.exception.NotAuthorizedForDataException import linkpool.link.link.port.`in`.UpdateLinkRequest import linkpool.link.link.port.`in`.UpdateLinkUseCase import linkpool.link.link.port.out.LinkPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/report/report/service/CreateReportService.kt b/api/domain/src/main/kotlin/linkpool/report/report/service/CreateReportService.kt index 2abbf73..58a4042 100644 --- a/api/domain/src/main/kotlin/linkpool/report/report/service/CreateReportService.kt +++ b/api/domain/src/main/kotlin/linkpool/report/report/service/CreateReportService.kt @@ -8,7 +8,7 @@ import linkpool.report.report.port.out.ReportPort import linkpool.report.report.model.Report import linkpool.report.report.model.ReportReason import linkpool.report.report.model.ReportTarget -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/report/report/service/GetReportService.kt b/api/domain/src/main/kotlin/linkpool/report/report/service/GetReportService.kt index 8917b25..f9ebfe1 100644 --- a/api/domain/src/main/kotlin/linkpool/report/report/service/GetReportService.kt +++ b/api/domain/src/main/kotlin/linkpool/report/report/service/GetReportService.kt @@ -5,7 +5,7 @@ import linkpool.report.report.model.Report import linkpool.report.report.model.ReportTarget import linkpool.report.report.port.`in`.GetReportUseCase import linkpool.report.report.port.out.ReportPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/user/jobgroup/service/JobGroupQueryService.kt b/api/domain/src/main/kotlin/linkpool/user/jobgroup/service/JobGroupQueryService.kt index b308995..0bc9c3b 100644 --- a/api/domain/src/main/kotlin/linkpool/user/jobgroup/service/JobGroupQueryService.kt +++ b/api/domain/src/main/kotlin/linkpool/user/jobgroup/service/JobGroupQueryService.kt @@ -5,7 +5,7 @@ import linkpool.exception.DataNotFoundException import linkpool.user.jobgroup.model.JobGroup import linkpool.user.jobgroup.port.`in`.JobGroupQuery import linkpool.user.jobgroup.port.out.JobGroupPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/user/user/service/CreateUserService.kt b/api/domain/src/main/kotlin/linkpool/user/user/service/CreateUserService.kt index 7f79824..0b75a11 100644 --- a/api/domain/src/main/kotlin/linkpool/user/user/service/CreateUserService.kt +++ b/api/domain/src/main/kotlin/linkpool/user/user/service/CreateUserService.kt @@ -6,7 +6,7 @@ import linkpool.user.user.port.`in`.CreateUserResponse import linkpool.user.user.port.`in`.CreateUserUseCase import linkpool.user.user.port.out.UserAuthPort import linkpool.user.user.port.out.UserPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/user/user/service/GetUserService.kt b/api/domain/src/main/kotlin/linkpool/user/user/service/GetUserService.kt index 2d068dd..98e15e6 100644 --- a/api/domain/src/main/kotlin/linkpool/user/user/service/GetUserService.kt +++ b/api/domain/src/main/kotlin/linkpool/user/user/service/GetUserService.kt @@ -6,7 +6,7 @@ import linkpool.exception.NotSignedUpException import linkpool.user.user.model.User import linkpool.user.user.port.`in`.GetUserUseCase import linkpool.user.user.port.out.UserPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional diff --git a/api/domain/src/main/kotlin/linkpool/user/user/service/UpdateUserService.kt b/api/domain/src/main/kotlin/linkpool/user/user/service/UpdateUserService.kt index 8893253..26fb0d7 100644 --- a/api/domain/src/main/kotlin/linkpool/user/user/service/UpdateUserService.kt +++ b/api/domain/src/main/kotlin/linkpool/user/user/service/UpdateUserService.kt @@ -6,7 +6,7 @@ import linkpool.user.user.port.`in`.GetUserUseCase import linkpool.user.user.port.`in`.UpdateUserUseCase import linkpool.user.user.port.`in`.ProfileRequest import linkpool.user.user.port.out.UserPort -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional @DomainComponent @Transactional From 68dd6c89b8e2d66d6e3d017818e133468eb7f3b9 Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Sat, 7 Oct 2023 18:10:17 +0900 Subject: [PATCH 3/7] [issue-1] refactor: change logLevel in handleForSignedOutEventListener --- .../main/kotlin/linkpool/event/UserSignedOutEventListener.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt index bde813f..2af5d4f 100644 --- a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt +++ b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt @@ -40,10 +40,11 @@ class UserSignedOutEventListener( folderEventDeferred.await() .onSuccess { log.info("succeed in folderEventListener from UserSignedOut... userId: ${message.payload.userId}") } - .onFailure { e -> log.info("Error in folderEventListener from UserSignedOut... userId: ${message.payload.userId} \n error: ${e.message}") } + .onFailure { e -> log.error("Error in folderEventListener from UserSignedOut... userId: ${message.payload.userId} \n error: ${e.message}") } linkEventDeferred.await() .onSuccess { log.info("succeed in linkEventListener from UserSignedOut... userId: ${message.payload.userId}") } - .onFailure { e -> log.info("Error in linkEventListener from UserSignedOut... userId: ${message.payload.userId} \n error: ${e.message}") } + .onFailure { e -> log.error("Error in linkEventListener from UserSignedOut... userId: ${message.payload.userId} \n error: ${e.message}") } + } } } \ No newline at end of file From 6c820b14d066b8757fd56121a5ba5fb7ac6fa1c9 Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Sat, 7 Oct 2023 18:10:30 +0900 Subject: [PATCH 4/7] [issue-1] refactor: delete exHandler in handleForSignedOutEventListener --- .../main/kotlin/linkpool/event/UserSignedOutEventListener.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt index 2af5d4f..10e4015 100644 --- a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt +++ b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventListener.kt @@ -28,9 +28,7 @@ class UserSignedOutEventListener( @ServiceActivator(inputChannel = "signedOutEvent") fun handleForSignedOutEventListener(@Payload message: Message) { - CoroutineScope(CoroutineExceptionHandler { _, exception -> - log.error("$exception in the handleForSignedOutEventListener") - } + Dispatchers.IO).launch { + CoroutineScope(Dispatchers.IO).launch { val folderEventDeferred = safeAsync { folderEventListener.deleteBatchAll(message.payload) } From 5d18bc853cabdf15c411bea3c791edb1052fbd1f Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Sat, 7 Oct 2023 18:10:54 +0900 Subject: [PATCH 5/7] [issue-1] refactor: add transactionalOperator in signOut --- .../user/user/service/SignOutService.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt b/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt index 447f7a9..6cb400f 100644 --- a/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt +++ b/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt @@ -7,21 +7,26 @@ import linkpool.user.user.port.`in`.SignOutUseCase import linkpool.user.user.port.out.UserPort import linkpool.user.user.port.out.UserEventPublishPort import linkpool.user.user.model.UserSignedOutEvent - -import javax.transaction.Transactional +import org.springframework.transaction.annotation.Transactional +import org.springframework.transaction.reactive.TransactionalOperator +import org.springframework.transaction.reactive.executeAndAwait @DomainComponent @Transactional class SignOutService( private val getUserUseCase: GetUserUseCase, private val userPort: UserPort, - private val userEventPublishPort: UserEventPublishPort + private val userEventPublishPort: UserEventPublishPort, + private val transactionalOperator: TransactionalOperator ): SignOutUseCase { override suspend fun signOut(userId: Long) { - val user = getUserUseCase.getById(userId) - user.signOut() - userPort.patch(user) - userEventPublishPort.publishUserSignedOutEvent(UserSignedOutEvent(user.id)) + transactionalOperator.executeAndAwait { + val user = getUserUseCase.getById(userId) + user.signOut() + userPort.patch(user) + }.run { + userEventPublishPort.publishUserSignedOutEvent(UserSignedOutEvent(userId)) + } } } \ No newline at end of file From 01eea11a52a1b423ea4b7d339e3513d874df71a5 Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Sat, 7 Oct 2023 18:11:10 +0900 Subject: [PATCH 6/7] [issue-1] refactor: change coroutine block 'run' to 'launch' --- .../main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt index 795197d..de4e4cd 100644 --- a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt +++ b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt @@ -2,6 +2,7 @@ package linkpool.event import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.springframework.beans.factory.annotation.Qualifier import linkpool.user.user.model.UserSignedOutEvent import linkpool.user.user.port.out.UserEventPublishPort @@ -22,7 +23,7 @@ class UserSignedOutEventPublisher( @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) override fun publishUserSignedOutEvent(userSignedOutEvent: UserSignedOutEvent) { - CoroutineScope(Dispatchers.IO).run { + CoroutineScope(Dispatchers.IO).launch { val message = MessageBuilder.withPayload(userSignedOutEvent).build() outputChannel.send(message) } From 3f97569a4ec9198a48c435bcc6ad532a164d4ef9 Mon Sep 17 00:00:00 2001 From: HyeonWuJeon Date: Mon, 30 Oct 2023 08:45:20 +0900 Subject: [PATCH 7/7] [issue-1] refactor: publish signOutEvent object in domain --- .../src/main/kotlin/linkpool/user/user/model/User.kt | 3 ++- .../kotlin/linkpool/user/user/service/SignOutService.kt | 8 ++++---- .../kotlin/linkpool/event/UserSignedOutEventPublisher.kt | 5 +---- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/api/domain/src/main/kotlin/linkpool/user/user/model/User.kt b/api/domain/src/main/kotlin/linkpool/user/user/model/User.kt index 1d11c77..e828b54 100644 --- a/api/domain/src/main/kotlin/linkpool/user/user/model/User.kt +++ b/api/domain/src/main/kotlin/linkpool/user/user/model/User.kt @@ -14,9 +14,10 @@ class User( private var deleted: Boolean = false ) { - fun signOut() { + fun signOut(): UserSignedOutEvent { profile = null deleted = true + return UserSignedOutEvent(id) } fun activate() { diff --git a/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt b/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt index 6cb400f..fc14790 100644 --- a/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt +++ b/api/domain/src/main/kotlin/linkpool/user/user/service/SignOutService.kt @@ -6,7 +6,6 @@ import linkpool.user.user.port.`in`.GetUserUseCase import linkpool.user.user.port.`in`.SignOutUseCase import linkpool.user.user.port.out.UserPort import linkpool.user.user.port.out.UserEventPublishPort -import linkpool.user.user.model.UserSignedOutEvent import org.springframework.transaction.annotation.Transactional import org.springframework.transaction.reactive.TransactionalOperator import org.springframework.transaction.reactive.executeAndAwait @@ -23,10 +22,11 @@ class SignOutService( override suspend fun signOut(userId: Long) { transactionalOperator.executeAndAwait { val user = getUserUseCase.getById(userId) - user.signOut() + val event = user.signOut() userPort.patch(user) - }.run { - userEventPublishPort.publishUserSignedOutEvent(UserSignedOutEvent(userId)) + event + }?.let { + userEventPublishPort.publishUserSignedOutEvent(it) } } } \ No newline at end of file diff --git a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt index de4e4cd..d532486 100644 --- a/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt +++ b/api/infra/src/main/kotlin/linkpool/event/UserSignedOutEventPublisher.kt @@ -3,15 +3,13 @@ package linkpool.event import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import org.springframework.beans.factory.annotation.Qualifier import linkpool.user.user.model.UserSignedOutEvent import linkpool.user.user.port.out.UserEventPublishPort +import org.springframework.beans.factory.annotation.Qualifier import org.springframework.integration.config.EnablePublisher import org.springframework.messaging.MessageChannel import org.springframework.messaging.support.MessageBuilder import org.springframework.stereotype.Component -import org.springframework.transaction.event.TransactionPhase -import org.springframework.transaction.event.TransactionalEventListener @Component @@ -21,7 +19,6 @@ class UserSignedOutEventPublisher( private val outputChannel: MessageChannel ) : UserEventPublishPort { - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) override fun publishUserSignedOutEvent(userSignedOutEvent: UserSignedOutEvent) { CoroutineScope(Dispatchers.IO).launch { val message = MessageBuilder.withPayload(userSignedOutEvent).build()