diff --git a/docs/20260224_SNS카카오오픈채팅전환.md b/docs/20260224_SNS카카오오픈채팅전환.md new file mode 100644 index 00000000..7c741b58 --- /dev/null +++ b/docs/20260224_SNS카카오오픈채팅전환.md @@ -0,0 +1,19 @@ +## 구현 항목 + +- [x] SNS 응답/요청 DTO 전수 점검 후 `blogUrl` 제거 +- [x] SNS 응답/요청 DTO에 `kakaoOpenChatUrl` 추가 +- [x] 기존 `websiteUrl` 입력/반환 값을 `kakaoOpenChatUrl`로 동일 매핑 +- [x] 회원 정보 수정 API(`ProfileUpdateRequest`, `MemberService.profileUpdate`) 반영 +- [x] SNS 정보를 반환하는 API 응답(`ProfileResponse`, `MyPageResponse`, `CreatorResponse`, `GetCreatorDetailResponse`, `GetLiveRoomUserProfileResponse`, `GetRoomDetailManager`) 반영 +- [x] LSP 진단/테스트/빌드 검증 및 결과 기록 + +## 검증 기록 + +- 1차 구현 + - 무엇을: SNS 필드를 `instagramUrl`, `fancimmUrl`, `xUrl`, `youtubeUrl`, `kakaoOpenChatUrl` 구조로 통일하고 `blogUrl`을 API 요청/응답 계층에서 제거했다. `kakaoOpenChatUrl`은 기존 `member.websiteUrl` 컬럼 값을 그대로 사용하도록 매핑했다. + - 왜: DB/Entity 변경 없이 기존 `websiteUrl` 저장 데이터를 카카오 오픈채팅 링크로 재해석해 노출하고, 더 이상 사용하지 않는 `blogUrl`을 API 스펙에서 제거하기 위해서다. + - 어떻게: + - 코드 반영: `ProfileUpdateRequest`, `ProfileResponse`, `MyPageResponse`, `CreatorResponse`, `GetCreatorDetailResponse`, `GetLiveRoomUserProfileResponse`, `GetRoomDetailResponse`, `MemberService`, `ExplorerService`, `LiveRoomService` + - 정적 진단: `lsp_diagnostics` 실행 시 `.kt` LSP 미구성으로 불가(환경 제약 확인) + - 동작 검증: `./gradlew test && ./gradlew build` 실행 + - 결과: `BUILD SUCCESSFUL` (test 성공 후 build 성공) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/CreatorResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/CreatorResponse.kt index 3d1c2d52..3316b7ea 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/CreatorResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/CreatorResponse.kt @@ -10,8 +10,7 @@ data class CreatorResponse( val fancimmUrl: String? = null, val xUrl: String? = null, val youtubeUrl: String? = null, - val websiteUrl: String? = null, - val blogUrl: String? = null, + val kakaoOpenChatUrl: String? = null, val isFollow: Boolean, val isNotify: Boolean, val isNotification: Boolean, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt index 55549600..a8eac5e5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/ExplorerService.kt @@ -248,8 +248,7 @@ class ExplorerService( fancimmUrl = creatorAccount.fancimmUrl, xUrl = creatorAccount.xUrl, youtubeUrl = creatorAccount.youtubeUrl, - websiteUrl = creatorAccount.websiteUrl, - blogUrl = creatorAccount.blogUrl + kakaoOpenChatUrl = creatorAccount.websiteUrl ) } @@ -451,8 +450,7 @@ class ExplorerService( fancimmUrl = creatorAccount.fancimmUrl, xUrl = creatorAccount.xUrl, youtubeUrl = creatorAccount.youtubeUrl, - websiteUrl = creatorAccount.websiteUrl, - blogUrl = creatorAccount.blogUrl, + kakaoOpenChatUrl = creatorAccount.websiteUrl, isFollow = creatorFollowing?.isFollow ?: false, isNotify = creatorFollowing?.isNotify ?: false, isNotification = creatorFollowing?.isFollow ?: false, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCreatorDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCreatorDetailResponse.kt index cee89522..e190ce87 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCreatorDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/explorer/GetCreatorDetailResponse.kt @@ -10,6 +10,5 @@ data class GetCreatorDetailResponse( val fancimmUrl: String, val xUrl: String, val youtubeUrl: String, - val websiteUrl: String, - val blogUrl: String + val kakaoOpenChatUrl: String ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLiveRoomUserProfileResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLiveRoomUserProfileResponse.kt index f93d51e9..cfbb15a9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLiveRoomUserProfileResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/GetLiveRoomUserProfileResponse.kt @@ -9,8 +9,7 @@ data class GetLiveRoomUserProfileResponse( val fancimmUrl: String, val xUrl: String, val youtubeUrl: String, - val websiteUrl: String, - val blogUrl: String, + val kakaoOpenChatUrl: String, val introduce: String, val tags: String, val isSpeaker: Boolean?, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index 2b86cdd2..bd8502c5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -1123,8 +1123,7 @@ class LiveRoomService( fancimmUrl = user.fancimmUrl, xUrl = user.xUrl, youtubeUrl = user.youtubeUrl, - websiteUrl = user.websiteUrl, - blogUrl = user.blogUrl, + kakaoOpenChatUrl = user.websiteUrl, introduce = user.introduce, tags = user.tags .asSequence() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/detail/GetRoomDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/detail/GetRoomDetailResponse.kt index b22590fb..a0def2f7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/detail/GetRoomDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/detail/GetRoomDetailResponse.kt @@ -33,8 +33,7 @@ data class GetRoomDetailManager( val instagramUrl: String?, val fancimmUrl: String?, val xUrl: String?, - val websiteUrl: String?, - val blogUrl: String?, + val kakaoOpenChatUrl: String?, val profileImageUrl: String, val isCreator: Boolean ) { @@ -46,8 +45,7 @@ data class GetRoomDetailManager( instagramUrl = member.instagramUrl, fancimmUrl = member.fancimmUrl, xUrl = member.xUrl, - websiteUrl = member.websiteUrl, - blogUrl = member.blogUrl, + kakaoOpenChatUrl = member.websiteUrl, profileImageUrl = if (member.profileImage != null) { "$cloudFrontHost/${member.profileImage}" } else { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt index 8c60dc8b..80a3ef77 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt @@ -305,8 +305,7 @@ class MemberService( instagramUrl = member.instagramUrl, fancimmUrl = member.fancimmUrl, xUrl = member.xUrl, - websiteUrl = member.websiteUrl, - blogUrl = member.blogUrl, + kakaoOpenChatUrl = member.websiteUrl, liveReservationCount = liveReservationCount, isAuth = member.auth != null, orderList = orderList @@ -737,12 +736,8 @@ class MemberService( member.xUrl = profileUpdateRequest.xUrl } - if (profileUpdateRequest.websiteUrl != null) { - member.websiteUrl = profileUpdateRequest.websiteUrl - } - - if (profileUpdateRequest.blogUrl != null) { - member.blogUrl = profileUpdateRequest.blogUrl + if (profileUpdateRequest.kakaoOpenChatUrl != null) { + member.websiteUrl = profileUpdateRequest.kakaoOpenChatUrl } if (profileUpdateRequest.isVisibleDonationRank != null) { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileResponse.kt index 4172767f..c401a6ec 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileResponse.kt @@ -12,8 +12,7 @@ data class ProfileResponse( val instagramUrl: String?, val fancimmUrl: String?, val xUrl: String?, - val blogUrl: String?, - val websiteUrl: String?, + val kakaoOpenChatUrl: String?, val introduce: String, val tags: List ) { @@ -33,8 +32,7 @@ data class ProfileResponse( instagramUrl = member.instagramUrl, fancimmUrl = member.fancimmUrl, xUrl = member.xUrl, - websiteUrl = member.websiteUrl, - blogUrl = member.blogUrl, + kakaoOpenChatUrl = member.websiteUrl, introduce = member.introduce, tags = member.tags.asSequence().filter { it.tag.isActive }.map { it.tag.tag }.toList() ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileUpdateRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileUpdateRequest.kt index 1f85148a..1e7b02b0 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileUpdateRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/ProfileUpdateRequest.kt @@ -13,8 +13,7 @@ data class ProfileUpdateRequest( val instagramUrl: String? = null, val fancimmUrl: String? = null, val xUrl: String? = null, - val websiteUrl: String? = null, - val blogUrl: String? = null, + val kakaoOpenChatUrl: String? = null, val isVisibleDonationRank: Boolean? = null, val donationRankingPeriod: DonationRankingPeriod? = null, val container: String diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt index 5c89d6e3..71930497 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt @@ -12,8 +12,7 @@ data class MyPageResponse( val instagramUrl: String?, val fancimmUrl: String? = null, val xUrl: String? = null, - val websiteUrl: String? = null, - val blogUrl: String? = null, + val kakaoOpenChatUrl: String? = null, val liveReservationCount: Int, val isAuth: Boolean, val orderList: GetAudioContentOrderListResponse