feat(member): 팬심M 및 X URL 필드를 프로필 응답에 연동한다
This commit is contained in:
4
docs/20260220_member_fancimm_x_url_ddl.sql
Normal file
4
docs/20260220_member_fancimm_x_url_ddl.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE member
|
||||
ADD fancimm_url VARCHAR(255) DEFAULT NULL COMMENT '팬심M url' AFTER instagram_url,
|
||||
ADD x_url VARCHAR(255) DEFAULT NULL COMMENT 'X url' AFTER fancimm_url
|
||||
;
|
||||
14
docs/20260220_팬심M와XURL추가.md
Normal file
14
docs/20260220_팬심M와XURL추가.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# 팬심M/X URL 추가 작업 계획
|
||||
|
||||
- [x] `Member` 엔티티 SNS 필드에 팬심M URL, X URL 속성 추가
|
||||
- [x] 인스타그램 URL 수정 흐름 분석 후 동일한 수정 요청 DTO 반영
|
||||
- [x] 서비스의 프로필 수정 로직에 팬심M URL, X URL 수정 처리 추가
|
||||
- [x] 관련 응답 DTO에 신규 URL 필드 반영 및 매핑 연결
|
||||
- [x] 후속 요청 반영: `fansimMUrl` 필드명을 `fancimmUrl`로 일괄 변경
|
||||
- [x] `ddl-auto: validate` 대응을 위한 DB 컬럼 추가 SQL 파일 생성
|
||||
- [x] 진단/테스트/빌드 검증 실행 후 결과 기록
|
||||
|
||||
## 검증 기록
|
||||
- 무엇을: 팬심M/X URL 필드 추가, 인스타그램 URL 수정 흐름과 동일한 수정/응답 매핑 반영, `fansimMUrl` -> `fancimmUrl` 명칭 변경을 검증했다.
|
||||
- 왜: 프로필 수정 API에서 두 URL이 저장되고, 주요 응답 DTO에서 값이 일관되게 내려가야 하기 때문이다.
|
||||
- 어떻게: `./gradlew ktlintCheck test build`를 팬심M/X URL 추가 시점과 `fancimmUrl` 명칭 변경 시점에 각각 실행해 정적 검사, 테스트, 빌드 성공(Exit code 0)을 확인했다. 또한 `docs/20260220_member_fancimm_x_url_ddl.sql`에 운영 DB 반영용 DDL을 추가했다. Kotlin LSP 미구성으로 `lsp_diagnostics`는 수행할 수 없었다.
|
||||
@@ -7,6 +7,8 @@ data class CreatorResponse(
|
||||
val tags: List<String>,
|
||||
val introduce: String = "",
|
||||
val instagramUrl: String? = null,
|
||||
val fancimmUrl: String? = null,
|
||||
val xUrl: String? = null,
|
||||
val youtubeUrl: String? = null,
|
||||
val websiteUrl: String? = null,
|
||||
val blogUrl: String? = null,
|
||||
|
||||
@@ -372,6 +372,8 @@ class ExplorerService(
|
||||
tags = creatorAccount.tags.asSequence().filter { it.tag.isActive }.map { it.tag.tag }.toList(),
|
||||
introduce = creatorAccount.introduce,
|
||||
instagramUrl = creatorAccount.instagramUrl,
|
||||
fancimmUrl = creatorAccount.fancimmUrl,
|
||||
xUrl = creatorAccount.xUrl,
|
||||
youtubeUrl = creatorAccount.youtubeUrl,
|
||||
websiteUrl = creatorAccount.websiteUrl,
|
||||
blogUrl = creatorAccount.blogUrl,
|
||||
|
||||
@@ -6,6 +6,8 @@ data class GetLiveRoomUserProfileResponse(
|
||||
val profileUrl: String,
|
||||
val gender: String,
|
||||
val instagramUrl: String,
|
||||
val fancimmUrl: String,
|
||||
val xUrl: String,
|
||||
val youtubeUrl: String,
|
||||
val websiteUrl: String,
|
||||
val blogUrl: String,
|
||||
|
||||
@@ -1098,6 +1098,8 @@ class LiveRoomService(
|
||||
else -> messageSource.getMessage("member.gender.unknown", langContext.lang)
|
||||
}.orEmpty(),
|
||||
instagramUrl = user.instagramUrl,
|
||||
fancimmUrl = user.fancimmUrl,
|
||||
xUrl = user.xUrl,
|
||||
youtubeUrl = user.youtubeUrl,
|
||||
websiteUrl = user.websiteUrl,
|
||||
blogUrl = user.blogUrl,
|
||||
|
||||
@@ -31,6 +31,8 @@ data class GetRoomDetailManager(
|
||||
val introduce: String,
|
||||
val youtubeUrl: String?,
|
||||
val instagramUrl: String?,
|
||||
val fancimmUrl: String?,
|
||||
val xUrl: String?,
|
||||
val websiteUrl: String?,
|
||||
val blogUrl: String?,
|
||||
val profileImageUrl: String,
|
||||
@@ -42,6 +44,8 @@ data class GetRoomDetailManager(
|
||||
introduce = member.introduce,
|
||||
youtubeUrl = member.youtubeUrl,
|
||||
instagramUrl = member.instagramUrl,
|
||||
fancimmUrl = member.fancimmUrl,
|
||||
xUrl = member.xUrl,
|
||||
websiteUrl = member.websiteUrl,
|
||||
blogUrl = member.blogUrl,
|
||||
profileImageUrl = if (member.profileImage != null) {
|
||||
|
||||
@@ -81,6 +81,8 @@ data class Member(
|
||||
|
||||
// SNS
|
||||
var instagramUrl = ""
|
||||
var fancimmUrl = ""
|
||||
var xUrl = ""
|
||||
var youtubeUrl = ""
|
||||
var websiteUrl = ""
|
||||
var blogUrl = ""
|
||||
|
||||
@@ -301,6 +301,8 @@ class MemberService(
|
||||
point = totalPoint,
|
||||
youtubeUrl = member.youtubeUrl,
|
||||
instagramUrl = member.instagramUrl,
|
||||
fancimmUrl = member.fancimmUrl,
|
||||
xUrl = member.xUrl,
|
||||
websiteUrl = member.websiteUrl,
|
||||
blogUrl = member.blogUrl,
|
||||
liveReservationCount = liveReservationCount,
|
||||
@@ -714,6 +716,14 @@ class MemberService(
|
||||
member.instagramUrl = profileUpdateRequest.instagramUrl
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.fancimmUrl != null) {
|
||||
member.fancimmUrl = profileUpdateRequest.fancimmUrl
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.xUrl != null) {
|
||||
member.xUrl = profileUpdateRequest.xUrl
|
||||
}
|
||||
|
||||
if (profileUpdateRequest.websiteUrl != null) {
|
||||
member.websiteUrl = profileUpdateRequest.websiteUrl
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ data class ProfileResponse(
|
||||
val rewardCan: Int,
|
||||
val youtubeUrl: String?,
|
||||
val instagramUrl: String?,
|
||||
val fancimmUrl: String?,
|
||||
val xUrl: String?,
|
||||
val blogUrl: String?,
|
||||
val websiteUrl: String?,
|
||||
val introduce: String,
|
||||
@@ -29,6 +31,8 @@ data class ProfileResponse(
|
||||
rewardCan = member.getRewardCan(container),
|
||||
youtubeUrl = member.youtubeUrl,
|
||||
instagramUrl = member.instagramUrl,
|
||||
fancimmUrl = member.fancimmUrl,
|
||||
xUrl = member.xUrl,
|
||||
websiteUrl = member.websiteUrl,
|
||||
blogUrl = member.blogUrl,
|
||||
introduce = member.introduce,
|
||||
|
||||
@@ -11,6 +11,8 @@ data class ProfileUpdateRequest(
|
||||
val introduce: String? = null,
|
||||
val youtubeUrl: String? = null,
|
||||
val instagramUrl: String? = null,
|
||||
val fancimmUrl: String? = null,
|
||||
val xUrl: String? = null,
|
||||
val websiteUrl: String? = null,
|
||||
val blogUrl: String? = null,
|
||||
val isVisibleDonationRank: Boolean? = null,
|
||||
|
||||
@@ -10,6 +10,8 @@ data class MyPageResponse(
|
||||
val point: Int,
|
||||
val youtubeUrl: String?,
|
||||
val instagramUrl: String?,
|
||||
val fancimmUrl: String? = null,
|
||||
val xUrl: String? = null,
|
||||
val websiteUrl: String? = null,
|
||||
val blogUrl: String? = null,
|
||||
val liveReservationCount: Int,
|
||||
|
||||
Reference in New Issue
Block a user