From 96aab64463679b8368bd1552ebe68120cac43fcc Mon Sep 17 00:00:00 2001 From: DongGeon0908 Date: Fri, 27 Sep 2024 11:18:05 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=98=84=EC=9E=AC=20=EC=B0=B8=EC=97=AC?= =?UTF-8?q?=EC=9E=90=20=EC=A1=B0=ED=9A=8C=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/dev/resource/DevWebsocketResource.kt | 10 +++++++++- .../ws/handler/ReactiveGroupUserWebSocketHandler.kt | 8 ++++++++ .../com/hero/alignlab/ws/model/WsGroupUserModel.kt | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/com/hero/alignlab/ws/model/WsGroupUserModel.kt diff --git a/src/main/kotlin/com/hero/alignlab/domain/dev/resource/DevWebsocketResource.kt b/src/main/kotlin/com/hero/alignlab/domain/dev/resource/DevWebsocketResource.kt index 5d2d4eb..afc61e2 100644 --- a/src/main/kotlin/com/hero/alignlab/domain/dev/resource/DevWebsocketResource.kt +++ b/src/main/kotlin/com/hero/alignlab/domain/dev/resource/DevWebsocketResource.kt @@ -3,6 +3,7 @@ package com.hero.alignlab.domain.dev.resource import com.hero.alignlab.config.swagger.SwaggerTag.DEV_TAG import com.hero.alignlab.domain.auth.model.DevAuthUser import com.hero.alignlab.domain.dev.application.DevWebsocketService +import com.hero.alignlab.ws.handler.ReactiveGroupUserWebSocketHandler import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.tags.Tag import org.springframework.http.MediaType @@ -14,7 +15,8 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping(produces = [MediaType.APPLICATION_JSON_VALUE]) class DevWebsocketResource( - private val devWebsocketService: DevWebsocketService + private val devWebsocketService: DevWebsocketService, + private val reactiveGroupUserWebSocketHandler: ReactiveGroupUserWebSocketHandler ) { @Operation(summary = "[DEV] websocket connection closed") @PostMapping("/api/dev/v1/websocket/connection-closed") @@ -23,4 +25,10 @@ class DevWebsocketResource( ) { devWebsocketService.forceCloseAllWebSocketSessions() } + + @Operation(summary = "[DEV] 현재 참여자 정보 조회") + @PostMapping("/api/dev/v1/websocket/group-users") + suspend fun getGroupUsers( + dev: DevAuthUser, + ) = reactiveGroupUserWebSocketHandler.getWsGroupUsers() } diff --git a/src/main/kotlin/com/hero/alignlab/ws/handler/ReactiveGroupUserWebSocketHandler.kt b/src/main/kotlin/com/hero/alignlab/ws/handler/ReactiveGroupUserWebSocketHandler.kt index 0dfac8f..7367e71 100644 --- a/src/main/kotlin/com/hero/alignlab/ws/handler/ReactiveGroupUserWebSocketHandler.kt +++ b/src/main/kotlin/com/hero/alignlab/ws/handler/ReactiveGroupUserWebSocketHandler.kt @@ -3,6 +3,7 @@ package com.hero.alignlab.ws.handler import com.hero.alignlab.domain.auth.application.AuthFacade import com.hero.alignlab.domain.group.application.GroupUserService import com.hero.alignlab.ws.model.GroupUserUriContext +import com.hero.alignlab.ws.model.WsGroupUserModel import com.hero.alignlab.ws.service.GroupUserWsFacade import io.github.oshai.kotlinlogging.KotlinLogging import kotlinx.coroutines.CoroutineScope @@ -149,4 +150,11 @@ class ReactiveGroupUserWebSocketHandler( /** Websocket Session Release */ groupUserByMap.clear() } + + fun getWsGroupUsers(): List { + return groupUserByMap.map { + WsGroupUserModel(it.key, it.value.keys) + } + } } + diff --git a/src/main/kotlin/com/hero/alignlab/ws/model/WsGroupUserModel.kt b/src/main/kotlin/com/hero/alignlab/ws/model/WsGroupUserModel.kt new file mode 100644 index 0000000..6b565c5 --- /dev/null +++ b/src/main/kotlin/com/hero/alignlab/ws/model/WsGroupUserModel.kt @@ -0,0 +1,6 @@ +package com.hero.alignlab.ws.model + +data class WsGroupUserModel( + val groupId: Long, + val uids: Set +)