103 lines
7.0 KiB
Markdown
103 lines
7.0 KiB
Markdown
# 20260327 멤버 콘텐츠 선호 기본값 조정
|
|
|
|
## 목적
|
|
- `MemberContentPreference` 신규 생성 기본값을 다음 정책으로 고정한다.
|
|
- 기존 회원 + `member.auth != null` 인 경우: `isAdultContentVisible = true`, `contentType = ContentType.ALL`
|
|
- 그 외: `isAdultContentVisible = false`, `contentType = ContentType.ALL`
|
|
|
|
## 구현 체크리스트
|
|
- [x] 기본값 시드 로직을 `member.auth` 기준 정책으로 단순화한다.
|
|
- QA: row 미존재 + 인증/미인증 케이스에서 저장값이 각각 `true/ALL`, `false/ALL`인지 테스트로 확인
|
|
- [x] 레거시 조회 파라미터(`isAdultContentVisible`, `contentType`)가 신규 row 기본값에 영향을 주지 않도록 정리한다.
|
|
- QA: `resolveForQuery` 호출 시 파라미터 전달 여부와 무관하게 정책 기본값으로 생성되는지 확인
|
|
- [x] 관련 단위/통합 테스트 기대값을 정책에 맞게 수정한다.
|
|
- QA: `MemberContentPreferenceServiceTest`, `MemberContentPreferenceIntegrationTest` 통과
|
|
- [x] 회귀 검증을 실행한다.
|
|
- QA: `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`, `./gradlew build` 성공
|
|
|
|
## 구현 완료 후 기록
|
|
### 1차 구현
|
|
- 무엇을:
|
|
- `MemberContentPreferenceService.initializeDefaultPreference`의 기본 seed를 `member.auth != null` 기준으로 변경해 인증 회원은 `true/ALL`, 그 외는 `false/ALL`로 생성되도록 수정했다.
|
|
- `resolveForQuery`의 신규 row 생성 seed 계산에서 legacy 파라미터를 제거하고 `member.auth` 기반 고정 정책(`true/ALL` 또는 `false/ALL`)만 사용하도록 정리했다.
|
|
- `MemberContentPreferenceServiceTest`, `MemberContentPreferenceIntegrationTest`의 관련 시나리오를 정책에 맞게 수정했다.
|
|
- 왜:
|
|
- 요청사항이 “기존 회원가입 + `member.auth != null`이면 `true/ALL`, 그 외는 `false/ALL`”로 명확하여, 신규 row 기본값이 요청 파라미터에 영향을 받지 않도록 일관된 기준으로 통일해야 했기 때문이다.
|
|
- 어떻게:
|
|
- 명령:
|
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest.shouldSeedPreferenceToTrueAndAllWhenRowMissingAndAuthenticatedRegardlessOfLegacyParams"`
|
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
|
- `./gradlew build`
|
|
- 결과:
|
|
- 정책 핵심 시나리오 단일 테스트 통과.
|
|
- 대상 단위/통합 테스트 통과.
|
|
- 전체 build(테스트/ktlint 포함) 통과.
|
|
- `.kt` 확장자용 LSP 서버가 현재 환경에 없어 `lsp_diagnostics`는 실행 불가였고, 대신 Gradle 검증으로 정합성을 확인했다.
|
|
|
|
## 연계 작업(동일 기능)
|
|
### 2차 구현 - `resolveForQuery` 조회 파라미터 제거
|
|
- 무엇을:
|
|
- `MemberContentPreferenceService.resolveForQuery` 시그니처에서 미사용 파라미터 2개
|
|
(`isAdultContentVisible`, `contentType`)를 제거하고 `member` 단일 파라미터로 정리했다.
|
|
- 시그니처 변경에 맞춰 서비스/컨트롤러/테스트의 `resolveForQuery` 호출부 인자 전달 코드를 일괄 정리했다.
|
|
- 왜:
|
|
- 실제로 사용되지 않는 파라미터를 제거해 함수 계약을 단순화하고, 호출부 가독성과 유지보수성을 높이기 위해서다.
|
|
- 어떻게:
|
|
- 명령:
|
|
- `./gradlew compileKotlin compileTestKotlin`
|
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
|
- `./gradlew build`
|
|
- `lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")`
|
|
- 결과:
|
|
- 시그니처 변경 직후 컴파일 에러로 표시된 호출부를 모두 정리한 뒤 `compileKotlin/compileTestKotlin` 성공.
|
|
- 관련 단위/통합 테스트 통과.
|
|
- 전체 build(ktlint/test 포함) 성공.
|
|
- 현재 환경에는 Kotlin LSP 서버가 없어 `lsp_diagnostics`는 실행 불가였고,
|
|
Gradle 컴파일/테스트/빌드로 정합성을 확인했다.
|
|
|
|
### 3차 구현 - 수정 파일 미사용 파라미터 정리
|
|
- 무엇을:
|
|
- `resolveForQuery(member = member)`로 단순화된 이후 미사용 상태가 된
|
|
`resolvePreference` 헬퍼 파라미터를 12개 파일에서 제거했다.
|
|
- 헬퍼 호출부를 정리했고, null 회원 분기에서 실제로 파라미터를 사용하는 서비스/컨트롤러
|
|
(`HomeService`, `LiveApiService`, `AudioContentController`, `AudioContentMainTabHomeController`)는
|
|
기존 전달 로직을 유지했다.
|
|
- 왜:
|
|
- 사용되지 않는 파라미터는 경고와 혼선을 유발해 유지보수 비용을 높이므로,
|
|
실제 사용하는 함수 계약만 남겨 코드 의도를 명확히 하기 위해서다.
|
|
- 어떻게:
|
|
- 명령:
|
|
- `./gradlew compileKotlin`
|
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
|
- `./gradlew build`
|
|
- `lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")`
|
|
- 결과:
|
|
- `compileKotlin` 성공.
|
|
- 관련 단위/통합 테스트 성공.
|
|
- 전체 build(ktlint/test 포함) 성공.
|
|
- 현재 환경에 Kotlin LSP 서버가 없어 `lsp_diagnostics`는 실행 불가였고,
|
|
Gradle 컴파일/테스트/빌드 결과로 정합성을 확인했다.
|
|
|
|
### 4차 수정 - 잔여 미사용 파라미터 추가 정리
|
|
- 무엇을:
|
|
- 3차 정리 이후에도 남아 있던 수정 파일 내 함수 미사용 파라미터를 추가 제거했다.
|
|
- `resolvePreference(member: Member)`만 사용하는 컨트롤러들의
|
|
`@RequestParam("isAdultContentVisible")`, `@RequestParam("contentType")`를 제거하고 import를 정리했다.
|
|
- `ExplorerService.getCreatorProfile`의 미사용 파라미터 `isAdultContentVisible`을 제거하고
|
|
`ExplorerController` 호출부를 함께 수정했다.
|
|
- 왜:
|
|
- 실제 로직에서 사용되지 않는 파라미터를 제거해 함수 계약을 단순화하고,
|
|
유지보수 시 혼선을 줄이기 위해서다.
|
|
- 어떻게:
|
|
- 명령:
|
|
- `./gradlew compileKotlin compileTestKotlin`
|
|
- `./gradlew test --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceServiceTest" --tests "kr.co.vividnext.sodalive.member.contentpreference.MemberContentPreferenceIntegrationTest"`
|
|
- `./gradlew build`
|
|
- `lsp_diagnostics(filePath="src/main/kotlin", extension=".kt")`
|
|
- 결과:
|
|
- `compileKotlin`, `compileTestKotlin` 성공.
|
|
- 관련 단위/통합 테스트 성공.
|
|
- 전체 build(ktlint/test 포함) 성공.
|
|
- 현재 환경에 Kotlin LSP 서버가 없어 `lsp_diagnostics`는 실행 불가였고,
|
|
Gradle 검증으로 정합성을 확인했다.
|