Files
2026-07-06 16:28:33 +09:00

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이다.
  • dayOfWeektype == 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만 제공한다.
      • 기타 요일은 en OTHER, ja その他로 표시된다.
  • 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는 response audios를 표시하고 totalCount는 노출하지 않는다.
  • Task 3.2: 시리즈/오리지널 grid 구현

    • 대상 파일:
      • 생성: SodaLive/Sources/V2/Main/Content/All/Components/MainContentSeriesThumbnailCard.swift
      • 수정: SodaLive/Sources/V2/Main/Content/All/MainContentAllView.swift
    • 검증 기준:
      • SERIES, ORIGINAL은 response series를 표시하고, 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추천/랭킹/전체 탭을 구성하고 MainContentViewMainContentAllViewModel@StateObject로 보유하도록 구현해 전체 탭 상태 유지 구조를 반영했다.
  • 2026-07-06: MainContentAllTabResponse, MainContentAllApi, MainContentAllRepository를 추가해 GET /api/v2/audio/contentsSERIES 전용 dayOfWeek query 전송 조건을 반영했다.
  • 2026-07-06: MainContentAllViewModelMainContentAllView에 타입 chip, SERIES 전용 요일 필터, sort menu, page 0 reload, hasNext 기반 append paging을 구현했다.
  • 2026-07-06: AudioContentThumbnailCardItem(mainContentAudio:) adapter와 MainContentSeriesThumbnailCard를 추가해 AUDIO/FREE/POINTaudios, SERIES/ORIGINALseries grid를 표시하도록 구현했다.
  • 2026-07-06: 오디오/시리즈 상세 이동은 기존 MainContentView callback과 MainView의 기존 handler를 재사용해 연결했으므로 MainView.swift 직접 수정은 발생하지 않았다.
  • 2026-07-06: I18n.MainContentAll/I18n.MainContentRanking 문자열을 추가했고, RANDOM 짧은 요일 표기는 en OTHER, 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 **를 확인했다.