diff --git a/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/BottleFacade.kt b/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/BottleFacade.kt index f2318fdc..a3fab5bd 100644 --- a/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/BottleFacade.kt +++ b/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/BottleFacade.kt @@ -21,6 +21,7 @@ import com.nexters.bottles.api.bottle.facade.dto.PingPongLetter import com.nexters.bottles.api.bottle.facade.dto.PingPongListResponse import com.nexters.bottles.api.bottle.facade.dto.PingPongUserProfile import com.nexters.bottles.api.bottle.facade.dto.RegisterLetterRequest +import com.nexters.bottles.api.bottle.util.getLastActivatedAtInKorean import com.nexters.bottles.api.user.component.event.dto.UserApplicationEventDto import com.nexters.bottles.app.bottle.domain.Bottle import com.nexters.bottles.app.bottle.domain.Letter @@ -115,7 +116,8 @@ class BottleFacade( mbti = bottle.sourceUser.userProfile?.profileSelect?.mbti, keyword = bottle.sourceUser.userProfile?.profileSelect?.keyword, userImageUrl = bottle.sourceUser.userProfile?.imageUrl, - expiredAt = bottle.expiredAt + expiredAt = bottle.expiredAt, + lastActivatedAt = getLastActivatedAtInKorean(basedAt = bottle.sourceUser.lastActivatedAt, now = LocalDateTime.now()) ) } @@ -202,6 +204,7 @@ class BottleFacade( mbti = otherUser.userProfile?.profileSelect?.mbti, keyword = otherUser.userProfile?.profileSelect?.keyword, userImageUrl = otherUser.userProfile?.imageUrl, + lastActivatedAt = getLastActivatedAtInKorean(basedAt = otherUser.lastActivatedAt, now = LocalDateTime.now()) ) } @@ -277,7 +280,9 @@ class BottleFacade( meetingPlace = null, meetingPlaceImageUrl = null, ) - ) + ).also { + applicationEventPublisher.publishEvent(UserApplicationEventDto(userId = userId, basedAt = LocalDateTime.now())) + } } private fun getDeleteAfterDays(bottle: Bottle): Long? { diff --git a/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/BottleListResponse.kt b/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/BottleListResponse.kt index d2759167..c0f0e481 100644 --- a/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/BottleListResponse.kt +++ b/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/BottleListResponse.kt @@ -17,6 +17,7 @@ data class BottleDto( val mbti: String?, val keyword: List?, val userImageUrl: String?, + val lastActivatedAt: String?, @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") val expiredAt: LocalDateTime diff --git a/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/PingPongListResponse.kt b/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/PingPongListResponse.kt index 94a8afbd..25a43e7d 100644 --- a/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/PingPongListResponse.kt +++ b/api/src/main/kotlin/com/nexters/bottles/api/bottle/facade/dto/PingPongListResponse.kt @@ -1,5 +1,7 @@ package com.nexters.bottles.api.bottle.facade.dto +import java.time.LocalDateTime + data class PingPongListResponse( val activeBottles: List, val doneBottles: List @@ -14,4 +16,5 @@ data class PingPongBottleDto( val mbti: String?, val keyword: List?, val userImageUrl: String?, + val lastActivatedAt: String?, ) diff --git a/api/src/main/kotlin/com/nexters/bottles/api/bottle/util/TimeConvertUtil.kt b/api/src/main/kotlin/com/nexters/bottles/api/bottle/util/TimeConvertUtil.kt new file mode 100644 index 00000000..d599a30a --- /dev/null +++ b/api/src/main/kotlin/com/nexters/bottles/api/bottle/util/TimeConvertUtil.kt @@ -0,0 +1,14 @@ +package com.nexters.bottles.api.bottle.util + +import java.time.LocalDateTime +import java.time.temporal.ChronoUnit + +fun getLastActivatedAtInKorean(basedAt: LocalDateTime, now: LocalDateTime): String { + val minutesBetween = ChronoUnit.MINUTES.between(basedAt, now) + + return when { + minutesBetween >= 1440 -> "${minutesBetween / 1440}일 전" // 1440분은 24시간 + minutesBetween >= 60 -> "${minutesBetween / 60}시간 전" + else -> "${minutesBetween}분 전" + } +}