From 25c48a76063795c216c6dc53753036c73f9c1217 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 24 Jun 2026 12:38:22 +0900 Subject: [PATCH] =?UTF-8?q?docs(content-ranking):=20=EB=9E=AD=ED=82=B9=20A?= =?UTF-8?q?PI=20=EA=B5=AC=ED=98=84=20=EA=B8=B0=EB=A1=9D=EC=9D=84=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan-task.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/20260623_메인_콘텐츠_랭킹_탭_API/plan-task.md b/docs/20260623_메인_콘텐츠_랭킹_탭_API/plan-task.md index 9f0eb491..afda35b7 100644 --- a/docs/20260623_메인_콘텐츠_랭킹_탭_API/plan-task.md +++ b/docs/20260623_메인_콘텐츠_랭킹_탭_API/plan-task.md @@ -224,7 +224,7 @@ data class AudioRankingSnapshotRecord( ### Phase 1: API 계약과 DTO -- [ ] **Task 1.1: `AudioRankingType`과 응답 DTO 작성** +- [x] **Task 1.1: `AudioRankingType`과 응답 DTO 작성** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingType.kt` - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRanking.kt` @@ -236,7 +236,7 @@ data class AudioRankingSnapshotRecord( - REFACTOR: 공개 DTO가 persistence/entity를 import하지 않도록 확인한다. - 기대 결과: PRD의 Response data class 계약이 테스트로 고정된다. -- [ ] **Task 1.2: facade 변환 계층 작성** +- [x] **Task 1.2: facade 변환 계층 작성** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacade.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/application/AudioRankingFacadeTest.kt` @@ -246,7 +246,7 @@ data class AudioRankingSnapshotRecord( - REFACTOR: facade에 점수 계산, 스냅샷 조회, fallback 로직을 두지 않는다. - 기대 결과: API 조립 계층과 도메인 조회 계층 의존 방향이 고정된다. -- [ ] **Task 1.3: 비회원 허용 controller 작성** +- [x] **Task 1.3: 비회원 허용 controller 작성** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/adapter/in/web/AudioRankingController.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/content/ranking/adapter/in/web/AudioRankingControllerTest.kt` @@ -258,7 +258,7 @@ data class AudioRankingSnapshotRecord( ### Phase 2: 기간/노출/점수 정책 -- [ ] **Task 2.1: KST 주간 집계 기간과 UTC 변환 정책 작성** +- [x] **Task 2.1: KST 주간 집계 기간과 UTC 변환 정책 작성** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingPeriodPolicy.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingPeriodPolicyTest.kt` @@ -268,7 +268,7 @@ data class AudioRankingSnapshotRecord( - REFACTOR: 서버 기본 timezone에 의존하지 않고 `ZoneId.of("Asia/Seoul")`을 명시한다. - 기대 결과: 모든 랭킹 타입의 집계 기준 기간이 동일하게 계산된다. -- [ ] **Task 2.2: 09:00 노출 전환 정책 작성** +- [x] **Task 2.2: 09:00 노출 전환 정책 작성** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingSchedulePolicy.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingSchedulePolicyTest.kt` @@ -278,7 +278,7 @@ data class AudioRankingSnapshotRecord( - REFACTOR: scheduler 실행 시각과 공개 노출 시각을 별도 함수로 분리한다. - 기대 결과: 계산 완료와 공개 노출 전환이 분리된다. -- [ ] **Task 2.3: 주간 인기/지금 뜨는 중 점수 정책 작성** +- [x] **Task 2.3: 주간 인기/지금 뜨는 중 점수 정책 작성** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingScorePolicy.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/content/ranking/domain/AudioRankingScorePolicyTest.kt` @@ -479,3 +479,7 @@ data class AudioRankingSnapshotRecord( ## 검증 기록 - 작성 시점: PRD 기반 구현 계획 문서를 신규 생성했다. 아직 구현 전이므로 task별 검증 기록은 없다. +- 2026-06-24 Phase 1, 2 구현: `AudioRankingType`, 응답 DTO, facade, 비회원 허용 controller, KST 주간 기간 정책, 09:00 KST 노출 전환 정책, 주간 인기/지금 뜨는 중 점수 정책을 추가했다. +- 2026-06-24 RED/GREEN: 각 task는 대상 테스트를 먼저 추가한 뒤 미구현 참조 또는 컨트롤러 미존재 실패를 확인하고 최소 구현으로 GREEN 전환했다. +- 2026-06-24 검증: `./gradlew test --tests kr.co.vividnext.sodalive.v2.api.content.ranking.dto.AudioRankingResponseTest --tests kr.co.vividnext.sodalive.v2.api.content.ranking.application.AudioRankingFacadeTest --tests kr.co.vividnext.sodalive.v2.api.content.ranking.adapter.in.web.AudioRankingControllerTest --tests kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingPeriodPolicyTest --tests kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingSchedulePolicyTest --tests kr.co.vividnext.sodalive.v2.content.ranking.domain.AudioRankingScorePolicyTest` 통과. +- 2026-06-24 검증: `./gradlew ktlintCheck` 통과.