diff --git a/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupFacade.kt b/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupFacade.kt index c080be2..dea6707 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupFacade.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupFacade.kt @@ -205,8 +205,17 @@ class GroupFacade( } suspend fun searchGroup(user: AuthUser, pageRequest: HeroPageRequest): Page { - return groupService.findAll(pageRequest.toDefault()) - .map { group -> SearchGroupResponse.from(group) } + val groups = groupService.findAll(pageRequest.toDefault()) + + val groupUserByUid = groups.content.map { group -> group.id } + .run { groupUserService.findByUidAndGroupIdIn(user.uid, this) } + .associateBy { groupUser -> groupUser.groupId } + + return groups + .map { group -> + val hasJoined = groupUserByUid[group.id] != null + SearchGroupResponse.from(group, hasJoined) + } } suspend fun deleteGroupUser(user: AuthUser, groupUserId: Long) { diff --git a/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupUserService.kt b/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupUserService.kt index ec1cfc3..2782293 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupUserService.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/group/application/GroupUserService.kt @@ -117,4 +117,10 @@ class GroupUserService( groupUserRepository.findAll() } } + + suspend fun findByUidAndGroupIdIn(uid: Long, groupIds: List): List { + return withContext(Dispatchers.IO) { + groupUserRepository.findByUidAndGroupIdIn(uid, groupIds) + } + } } diff --git a/src/main/kotlin/com/hero/alignlab/domain/group/infrastructure/GroupUserRepository.kt b/src/main/kotlin/com/hero/alignlab/domain/group/infrastructure/GroupUserRepository.kt index fb7c8a4..0d0598b 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/group/infrastructure/GroupUserRepository.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/group/infrastructure/GroupUserRepository.kt @@ -32,4 +32,6 @@ interface GroupUserRepository : JpaRepository { fun findByUid(uid: Long): GroupUser? fun countAllByGroupId(groupId: Long): Long + + fun findByUidAndGroupIdIn(uid: Long, groupIds: List): List } diff --git a/src/main/kotlin/com/hero/alignlab/domain/group/model/response/SearchGroupResponse.kt b/src/main/kotlin/com/hero/alignlab/domain/group/model/response/SearchGroupResponse.kt index 7d2d8d0..535577a 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/group/model/response/SearchGroupResponse.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/group/model/response/SearchGroupResponse.kt @@ -13,15 +13,18 @@ data class SearchGroupResponse( val name: String, /** 비밀 그룹 여부 */ val isHidden: Boolean, + /** 그룹에 속해 있는지 여부 */ + val hasJoined: Boolean, ) { companion object { - fun from(group: Group): SearchGroupResponse { + fun from(group: Group, hasJoined: Boolean): SearchGroupResponse { return SearchGroupResponse( id = group.id, userCount = group.userCount, userCapacity = group.userCapacity, name = group.name, isHidden = group.isHidden, + hasJoined = hasJoined ) } }