diff --git a/Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/domains/promiseactive/listener/RedisExpireEventRedisMessageListener.kt b/Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/domains/promiseactive/listener/RedisExpireEventRedisMessageListener.kt index 589f304b..f20896b3 100644 --- a/Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/domains/promiseactive/listener/RedisExpireEventRedisMessageListener.kt +++ b/Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/domains/promiseactive/listener/RedisExpireEventRedisMessageListener.kt @@ -1,6 +1,9 @@ package com.depromeet.whatnow.domains.promiseactive.listener import com.depromeet.whatnow.common.aop.event.Events +import com.depromeet.whatnow.domains.promise.adaptor.PromiseAdaptor +import com.depromeet.whatnow.domains.promiseactive.repository.PromiseActiveRepository +import com.depromeet.whatnow.domains.promiseuser.adaptor.PromiseUserAdaptor import com.depromeet.whatnow.events.domainEvent.PromiseTimeEndEvent import com.depromeet.whatnow.events.domainEvent.PromiseTimeStartEvent import com.depromeet.whatnow.events.domainEvent.PromiseTrackingTimeEndEvent @@ -10,7 +13,11 @@ import org.springframework.stereotype.Component import org.springframework.transaction.annotation.Transactional @Component -class RedisExpireEventRedisMessageListener : MessageListener { +class RedisExpireEventRedisMessageListener( + val promiseAdapter: PromiseAdaptor, + val promiseUserAdaptor: PromiseUserAdaptor, + val promiseActiveRepository: PromiseActiveRepository, +) : MessageListener { @Transactional override fun onMessage(message: Message, pattern: ByteArray?) { val event = message.toString() @@ -29,6 +36,22 @@ class RedisExpireEventRedisMessageListener : MessageListener { } private fun handlePromiseTimeStart(key: Long) { + val promise = promiseAdapter.queryPromise(key) + val promiseUsers = promiseUserAdaptor.findByPromiseId(key) + if (promiseUsers.size < 2) { + promise.endPromise() + + val eventIdList = listOf( + "EXPIRE_EVENT_PROMISE_TIME_END_$key", + "EXPIRE_EVENT_TRACKING_TIME_END_$key", + ) + + eventIdList.stream() + .map { eventId -> promiseActiveRepository.findById(eventId) } + .filter { eventOptional -> eventOptional.isPresent } + .forEach { eventOptional -> promiseActiveRepository.delete(eventOptional.get()) } + return + } Events.raise(PromiseTimeStartEvent(key)) }