diff --git a/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/dto/PromiseUserInfoVo.kt b/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/dto/PromiseUserInfoVo.kt index d10d9400..008a7c76 100644 --- a/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/dto/PromiseUserInfoVo.kt +++ b/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/dto/PromiseUserInfoVo.kt @@ -1,5 +1,6 @@ package com.depromeet.whatnow.api.promise.dto +import com.depromeet.whatnow.api.interaction.dto.InteractionDto import com.depromeet.whatnow.domains.promiseuser.domain.PromiseUserType import com.depromeet.whatnow.domains.user.domain.User @@ -8,13 +9,12 @@ data class PromiseUserInfoVo( val nickname: String, val isDefaultImg: Boolean, val promiseUserType: PromiseUserType, - // TODO : Interaction 리스트 ( ex. POOP : 1, MUSIC : 2, ... ) - // val interactions: List + val interactions: List, ) { - // interaction 기능 추가시 함께 추가할게요. companion object { - fun of(user: User, promiseUserType: PromiseUserType): PromiseUserInfoVo { - return PromiseUserInfoVo(user.profileImg, user.nickname, user.isDefaultImg, promiseUserType) + fun of(user: User, promiseUserType: PromiseUserType, interactionDtoList: List): PromiseUserInfoVo { + val list = interactionDtoList.sortedByDescending { interactionDto -> interactionDto.count } + return PromiseUserInfoVo(user.profileImg, user.nickname, user.isDefaultImg, promiseUserType, list) } } } diff --git a/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCase.kt b/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCase.kt index 378845e2..7fa5f1a5 100644 --- a/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCase.kt +++ b/Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCase.kt @@ -1,12 +1,14 @@ package com.depromeet.whatnow.api.promise.usecase import com.depromeet.whatnow.annotation.UseCase +import com.depromeet.whatnow.api.interaction.dto.InteractionDto import com.depromeet.whatnow.api.promise.dto.LocationCapture import com.depromeet.whatnow.api.promise.dto.PromiseDetailDto import com.depromeet.whatnow.api.promise.dto.PromiseFindDto import com.depromeet.whatnow.api.promise.dto.PromiseUserInfoVo import com.depromeet.whatnow.common.vo.UserInfoVo import com.depromeet.whatnow.config.security.SecurityUtils +import com.depromeet.whatnow.domains.interaction.adapter.InteractionAdapter import com.depromeet.whatnow.domains.promise.adaptor.PromiseAdaptor import com.depromeet.whatnow.domains.promise.domain.Promise import com.depromeet.whatnow.domains.promise.domain.PromiseType @@ -23,6 +25,7 @@ class PromiseReadUseCase( val promiseUserAdaptor: PromiseUserAdaptor, val userAdapter: UserAdapter, val userRepository: UserRepository, + val interactionAdapter: InteractionAdapter, ) { /** * method desc: 유저가 참여한 약속들을 약속 종류(BEFORE, PAST)에 따라 분리해서 조회 @@ -115,7 +118,15 @@ class PromiseReadUseCase( val promiseUsers = promiseUsersByPromiseId.filter { it.promiseId == promise.id } val promiseUserInfoVos = promiseUsers.mapNotNull { promiseUser -> val user = users.find { it.id == promiseUser.userId } - user?.let { PromiseUserInfoVo.of(it, promiseUser.promiseUserType!!) } + + // 유저의 Interaction 정보를 조회 (인터렉션 개수 순으로 내림차순 정렬) + val interactions = + interactionAdapter.queryAllInteraction(promiseUser.promiseId, promiseUser.userId) + .map { InteractionDto.from(it) } + .sortedByDescending { interactionDto -> interactionDto.count } + user?.let { + PromiseUserInfoVo.of(it, promiseUser.promiseUserType!!, interactions) + } } val timeOverLocations = promiseUsers.mapNotNull { promiseUser -> diff --git a/Whatnow-Api/src/test/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCaseTest.kt b/Whatnow-Api/src/test/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCaseTest.kt index 272baa33..c1478a6a 100644 --- a/Whatnow-Api/src/test/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCaseTest.kt +++ b/Whatnow-Api/src/test/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCaseTest.kt @@ -1,5 +1,8 @@ package com.depromeet.whatnow.api.promise.usecase +import com.depromeet.whatnow.domains.interaction.adapter.InteractionAdapter +import com.depromeet.whatnow.domains.interaction.domain.Interaction +import com.depromeet.whatnow.domains.interaction.domain.InteractionType import com.depromeet.whatnow.domains.promise.adaptor.PromiseAdaptor import com.depromeet.whatnow.domains.promise.domain.Promise import com.depromeet.whatnow.domains.promise.domain.PromiseType @@ -41,6 +44,9 @@ class PromiseReadUseCaseTest { @Mock private lateinit var userRepository: UserRepository + @Mock + private lateinit var interactionAdapter: InteractionAdapter + @InjectMocks private lateinit var promiseReadUseCase: PromiseReadUseCase @@ -52,6 +58,7 @@ class PromiseReadUseCaseTest { promiseUserAdaptor = promiseUserAdaptor, promiseAdaptor = promiseAdaptor, userAdapter = userAdapter, + interactionAdapter = interactionAdapter, ) val securityContext = SecurityContextHolder.createEmptyContext() val authentication = UsernamePasswordAuthenticationToken("1", null, setOf(SimpleGrantedAuthority("ROLE_USER"))) @@ -92,10 +99,17 @@ class PromiseReadUseCaseTest { id = 2, ), ) + val interactions = listOf( + Interaction(InteractionType.HEART, 1, 1, 242), + Interaction(InteractionType.MUSIC, 1, 1, 1234), + Interaction(InteractionType.POOP, 1, 1, 12), + Interaction(InteractionType.STEP, 1, 1, 2934), + ) Mockito.`when`(promiseUserAdaptor.findByUserId(userId)).thenReturn(promiseUsers) Mockito.`when`(promiseAdaptor.queryPromises(listOf(1, 2))).thenReturn(promises) Mockito.`when`(userAdapter.queryUsers(listOf(1))).thenReturn(users) + Mockito.`when`(interactionAdapter.queryAllInteraction(1, 1)).thenReturn(interactions) // When val result = promiseReadUseCase.findPromiseDetailByStatus(PromiseType.BEFORE) @@ -110,5 +124,8 @@ class PromiseReadUseCaseTest { Assertions.assertEquals("Promise 2", result[1].title) Assertions.assertEquals(promiseTime2, result[1].date) Assertions.assertEquals(1, result[1].promiseUsers.size) + + Assertions.assertEquals(2934, result[0].promiseUsers[0].interactions[0].count) + Assertions.assertEquals(1234, result[0].promiseUsers[0].interactions[1].count) } }