Skip to content

Commit a35a378

Browse files
authored
release: 1.3.3 (#143)
2 parents ff71417 + 104a18a commit a35a378

File tree

3 files changed

+64
-19
lines changed

3 files changed

+64
-19
lines changed

src/main/kotlin/org/gitanimals/core/CoroutineScope.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package org.gitanimals.core
22

33
import jakarta.annotation.PreDestroy
4-
import kotlinx.coroutines.CoroutineDispatcher
5-
import kotlinx.coroutines.CoroutineScope
6-
import kotlinx.coroutines.asCoroutineDispatcher
7-
import kotlinx.coroutines.launch
4+
import kotlinx.coroutines.*
85
import kotlinx.coroutines.slf4j.MDCContext
96
import org.gitanimals.core.GracefulShutdownDispatcher.executorService
107
import org.slf4j.LoggerFactory

src/main/kotlin/org/gitanimals/quiz/infra/hibernate/QuizDeletedHibernateEventListener.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,50 @@
11
package org.gitanimals.quiz.infra.hibernate
22

3+
import org.gitanimals.core.GracefulShutdownDispatcher.gracefulLaunch
34
import org.gitanimals.quiz.domain.approved.Quiz
45
import org.gitanimals.quiz.infra.similarity.QuizSimilarityRepository
56
import org.hibernate.event.spi.PostDeleteEvent
67
import org.hibernate.event.spi.PostDeleteEventListener
78
import org.hibernate.persister.entity.EntityPersister
89
import org.slf4j.LoggerFactory
10+
import org.springframework.context.ApplicationEventPublisher
11+
import org.springframework.context.event.EventListener
912
import org.springframework.stereotype.Component
1013

1114
@Component
1215
class QuizDeletedHibernateEventListener(
13-
private val quizSimilarityRepository: QuizSimilarityRepository,
16+
private val applicationEventPublisher: ApplicationEventPublisher,
1417
) : PostDeleteEventListener {
1518

16-
private val logger = LoggerFactory.getLogger(this::class.simpleName)
17-
1819
override fun requiresPostCommitHandling(persister: EntityPersister): Boolean =
1920
persister.mappedClass == Quiz::class.java
2021

2122
override fun onPostDelete(event: PostDeleteEvent) {
2223
if (event.entity is Quiz) {
2324
val quiz = event.entity as Quiz
25+
applicationEventPublisher.publishEvent(QuizDeleteLogicDelegator.QuizDeleted(quiz.id))
26+
}
27+
}
28+
}
29+
30+
@Component
31+
class QuizDeleteLogicDelegator(
32+
private val quizSimilarityRepository: QuizSimilarityRepository,
33+
) {
34+
35+
private val logger = LoggerFactory.getLogger(this::class.simpleName)
36+
37+
data class QuizDeleted(
38+
val quizId: Long,
39+
)
40+
41+
@EventListener(QuizDeleted::class)
42+
fun listenQuizDeleted(event: QuizDeleted) {
43+
gracefulLaunch {
2444
runCatching {
25-
quizSimilarityRepository.deleteByQuizId(quiz.id)
45+
quizSimilarityRepository.deleteByQuizId(event.quizId)
2646
}.getOrElse {
27-
logger.error("Cannot delete quiz similarity must fix it. quizId: \"${quiz.id}\"")
47+
logger.error("Cannot delete quiz similarity must fix it. quizId: \"${event.quizId}\"")
2848
}
2949
}
3050
}

src/main/kotlin/org/gitanimals/quiz/infra/hibernate/QuizSolveContextDoneHibernateEventListener.kt

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.gitanimals.quiz.infra.hibernate
22

3+
import org.gitanimals.core.GracefulShutdownDispatcher.gracefulLaunch
34
import org.gitanimals.core.IdGenerator
45
import org.gitanimals.inbox.domain.InboxType
56
import org.gitanimals.quiz.app.IdentityApi
@@ -12,45 +13,72 @@ import org.hibernate.event.spi.PostUpdateEvent
1213
import org.hibernate.event.spi.PostUpdateEventListener
1314
import org.hibernate.persister.entity.EntityPersister
1415
import org.slf4j.LoggerFactory
16+
import org.springframework.context.ApplicationEventPublisher
17+
import org.springframework.context.event.EventListener
1518
import org.springframework.stereotype.Component
1619

1720
@Component
1821
class QuizSolveContextDoneHibernateEventListener(
19-
private val inboxApi: InboxApi,
20-
private val identityApi: IdentityApi,
22+
private val applicationEventPublisher: ApplicationEventPublisher,
2123
) : PostUpdateEventListener {
2224

23-
private val logger = LoggerFactory.getLogger(this::class.simpleName)
24-
2525
override fun requiresPostCommitHandling(persister: EntityPersister): Boolean =
2626
persister.mappedClass == QuizSolveContext::class.java
2727

2828
override fun onPostUpdate(event: PostUpdateEvent) {
2929
if (event.entity is QuizSolveContext) {
3030
val quizSolveContext = event.entity as QuizSolveContext
31-
if (quizSolveContext.getStatus() == QuizSolveContextStatus.DONE) {
31+
applicationEventPublisher.publishEvent(
32+
QuizSolveContextDoneLogicDelegator.QuizSolveContextDone(
33+
userId = quizSolveContext.userId,
34+
prize = quizSolveContext.getPrize(),
35+
status = quizSolveContext.getStatus(),
36+
)
37+
)
38+
}
39+
}
40+
}
41+
42+
@Component
43+
class QuizSolveContextDoneLogicDelegator(
44+
private val inboxApi: InboxApi,
45+
private val identityApi: IdentityApi,
46+
) {
47+
48+
private val logger = LoggerFactory.getLogger(this::class.simpleName)
49+
50+
data class QuizSolveContextDone(
51+
val userId: Long,
52+
val prize: Int,
53+
val status: QuizSolveContextStatus,
54+
)
55+
56+
@EventListener(QuizSolveContextDone::class)
57+
fun listenQUizSolveContextDone(event: QuizSolveContextDone) {
58+
gracefulLaunch {
59+
if (event.status == QuizSolveContextStatus.DONE) {
3260
runCatching {
3361
identityApi.increaseUserPointsById(
34-
userId = quizSolveContext.userId,
35-
point = quizSolveContext.getPrize().toLong(),
62+
userId = event.userId,
63+
point = event.prize.toLong(),
3664
idempotencyKey = IdGenerator.generate().toString(),
3765
)
3866
}.onSuccess {
3967
inboxApi.inputInbox(
4068
InboxInputRequest(
4169
inboxData = InboxData(
42-
userId = quizSolveContext.userId,
70+
userId = event.userId,
4371
type = InboxType.INBOX,
4472
title = "Quiz prize arrived.",
45-
body = "Congratulations! You got ${quizSolveContext.getPrize()} point by solving quiz.",
73+
body = "Congratulations! You got ${event.prize} point by solving quiz.",
4674
image = "https://avatars.githubusercontent.com/u/171903401?s=200&v=4",
4775
redirectTo = "NO_REDIRECT",
4876
)
4977
)
5078
)
5179
}.onFailure {
5280
logger.error(
53-
"Cannot give point to user. userId: \"${quizSolveContext.userId}\", missing point: \"${quizSolveContext.getPrize()}\"",
81+
"Cannot give point to user. userId: \"${event.userId}\", missing point: \"${event.prize}\"",
5482
it
5583
)
5684
}

0 commit comments

Comments
 (0)