6.1 KiB
6.1 KiB
메인 콘텐츠 탭 내부 전체 탭 구현 계획
기준 문서
- PRD:
docs/20260706_메인_콘텐츠_내부_전체_탭/prd.md - 문서 정책:
docs/agent-guides/documentation-policy.md - 코드 스타일:
docs/agent-guides/code-style.md - 빌드/검증:
docs/agent-guides/build-test-verification.md
구현할 UI의 Figma URL
- 오디오 선택 상태:
https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=35-5857&m=dev - 시리즈 선택 상태:
https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=24-6909&m=dev - 오리지널 선택 상태:
https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=24-9105&m=dev
확정 요구사항 요약
- API endpoint는
GET /api/v2/audio/contents를 사용한다. - 기본 query는
type=AUDIO,sort=LATEST,page=0,size=20이다. dayOfWeek는type == SERIES일 때만 전송한다.- Figma 타입 chip의
전체는 구현하지 않는다. - Figma sort menu의
추천순은 구현하지 않는다. FREE타입의 sort menu는최신순,인기순만 제공한다.- response의
totalCount는 UI에 표시하지 않는다. - 내부
추천/랭킹/전체탭 전환 시전체탭 상태를 유지한다.
TASK 체크리스트
Phase 1: 전체 탭 기준 구조와 API 모델
-
Task 1.1: 내부 전체 탭 진입 구조와 상태 유지 설계
- 대상 파일:
- 수정:
SodaLive/Sources/V2/Main/Content/MainContentTab.swift - 수정:
SodaLive/Sources/V2/Main/Content/MainContentView.swift
- 수정:
- 검증 기준:
- 내부
전체탭이 추가되고,추천/랭킹/전체탭 전환 시전체탭 상태가 유지된다.
- 내부
- 대상 파일:
-
Task 1.2: API 모델과 repository 추가
- 대상 파일:
- 생성:
SodaLive/Sources/V2/Main/Content/All/Models/MainContentAllTabResponse.swift - 생성:
SodaLive/Sources/V2/Main/Content/All/Repository/MainContentAllApi.swift - 생성:
SodaLive/Sources/V2/Main/Content/All/Repository/MainContentAllRepository.swift
- 생성:
- 검증 기준:
GET /api/v2/audio/contents와 query parameter 기본값,SERIES전용dayOfWeek전송 조건이 반영된다.
- 대상 파일:
Phase 2: 필터, 정렬, 페이징
-
Task 2.1: 타입 chip, 요일 필터, sort menu 구현
- 대상 파일:
- 생성:
SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift - 생성:
SodaLive/Sources/V2/Main/Content/All/MainContentAllViewModel.swift - 수정:
SodaLive/Sources/I18n/I18n.swift
- 생성:
- 검증 기준:
- 타입 chip에
전체가 없고,추천순sort가 없으며,FREE타입은LATEST,POPULAR만 제공한다. 기타요일은 enOTHER, jaその他로 표시된다.
- 타입 chip에
- 대상 파일:
-
Task 2.2: 스크롤 페이징 구현
- 대상 파일:
- 수정:
SodaLive/Sources/V2/Main/Content/All/MainContentAllViewModel.swift - 수정:
SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift
- 수정:
- 검증 기준:
hasNext == true일 때 다음 page가 append되고, 타입/정렬/요일 변경 시 page 0부터 다시 로드된다.
- 대상 파일:
Phase 3: 콘텐츠 grid와 navigation
-
Task 3.1: 오디오/무료/포인트 grid 구현
- 대상 파일:
- 확인/수정:
SodaLive/Sources/V2/Component/AudioContent/AudioContentThumbnailCard.swift - 수정:
SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift
- 확인/수정:
- 검증 기준:
AUDIO,FREE,POINT는 responseaudios를 표시하고totalCount는 노출하지 않는다.
- 대상 파일:
-
Task 3.2: 시리즈/오리지널 grid 구현
- 대상 파일:
- 생성:
SodaLive/Sources/V2/Main/Content/All/Components/MainContentSeriesThumbnailCard.swift - 수정:
SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift
- 생성:
- 검증 기준:
SERIES,ORIGINAL은 responseseries를 표시하고,SERIES에서만 요일 필터와dayOfWeek요청이 동작한다.
- 대상 파일:
-
Task 3.3: 상세 이동 연결
- 대상 파일:
- 수정:
SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift - 수정:
SodaLive/Sources/V2/Main/MainView.swift
- 수정:
- 검증 기준:
- 오디오는
audioContentId로 오디오 상세, 시리즈는seriesId로 시리즈 상세에 진입한다.
- 오디오는
- 대상 파일:
검증 기록
- 2026-07-06: 사용자 요청에 따라 구현 대상 Figma URL을 본 문서에 기록했다.
- 2026-07-06:
MainContentTab에추천/랭킹/전체탭을 구성하고MainContentView가MainContentAllViewModel을@StateObject로 보유하도록 구현해전체탭 상태 유지 구조를 반영했다. - 2026-07-06:
MainContentAllTabResponse,MainContentAllApi,MainContentAllRepository를 추가해GET /api/v2/audio/contents와SERIES전용dayOfWeekquery 전송 조건을 반영했다. - 2026-07-06:
MainContentAllViewModel과MainContentAllView에 타입 chip,SERIES전용 요일 필터, sort menu, page 0 reload,hasNext기반 append paging을 구현했다. - 2026-07-06:
AudioContentThumbnailCardItem(mainContentAudio:)adapter와MainContentSeriesThumbnailCard를 추가해AUDIO/FREE/POINT는audios,SERIES/ORIGINAL은seriesgrid를 표시하도록 구현했다. - 2026-07-06: 오디오/시리즈 상세 이동은 기존
MainContentViewcallback과MainView의 기존 handler를 재사용해 연결했으므로MainView.swift직접 수정은 발생하지 않았다. - 2026-07-06:
I18n.MainContentAll/I18n.MainContentRanking문자열을 추가했고,RANDOM짧은 요일 표기는 enOTHER, jaその他로 반영했다. - 2026-07-06:
xcodebuild -workspace "SodaLive.xcworkspace" -list로 테스트 타깃이 별도 노출되지 않음을 확인했다. - 2026-07-06:
xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug -sdk iphonesimulator build실행 결과** BUILD SUCCEEDED **를 확인했다.