feat(profile): 카카오 오픈채팅 URL 필드로 프로필 응답과 수정을 통일한다
This commit is contained in:
19
docs/20260224_SNS카카오오픈채팅전환.md
Normal file
19
docs/20260224_SNS카카오오픈채팅전환.md
Normal file
@@ -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 성공)
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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?,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<String>
|
||||
) {
|
||||
@@ -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()
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user