Skip to content

[Feature] 사용자가 기록한 음악 통계 #88

@stopstone

Description

@stopstone

#️⃣ 요청 유형

해당되는 항목을 선택해주세요.

  • 새로운 기능 추가

  • 기존 기능 개선

  • 성능 개선

#️⃣ 어떤 기능인가요?

추가하려는 기능 또는 개선하려는 부분에 대해 간결하게 설명해주세요.

사용자가 기록한 음악과 감정 데이터를 분석하여 다양한 통계 정보를 제공하는 기능입니다.

주요 통계 항목:

  • 감정 통계: 월별/연도별 감정 분포 및 패턴 분석
  • 아티스트 통계: 가장 많이 들은 아티스트 TOP 10
  • 음악 통계: 가장 많이 들은 곡, 총 기록된 음악 개수
  • 기간별 통계: 일별/주별/월별/연도별 음악 기록 추이
  • 시각화: 감정 패턴, 아티스트 분포 등을 그래프/차트로 표현

#️⃣ 이 기능이 필요한 이유는 무엇인가요?

이 기능이 왜 필요한지, 또는 개선/성능 향상이 필요한 이유에 대해 설명해주세요.

  1. 사용자 인사이트 제공: 사용자가 자신의 감정 패턴과 음악 선호도를 한눈에 파악할 수 있어 앱의 가치를 높입니다.
  2. 데이터 활용: 이미 수집되고 있는 DailyTrack 데이터를 활용하여 부가 가치를 창출합니다.
  3. 사용자 참여도 향상: 통계를 통해 사용자가 자신의 기록에 대해 더 관심을 갖게 되고, 지속적인 사용을 유도할 수 있습니다.

구현 방안 (선택)

이 기능을 어떻게 구현할 수 있을지에 대한 아이디어를 간단히 설명해주세요.

아키텍처 구조 (Clean Architecture 준수)

1. Domain Layer

  • StatisticsRepository (Interface): 통계 데이터 조회 인터페이스 정의
  • UseCase들:
    • GetEmotionStatisticsUseCase: 감정 통계 조회
    • GetArtistStatisticsUseCase: 아티스트별 통계 조회
    • GetMonthlyStatisticsUseCase: 월별 통계 조회
    • GetYearlyStatisticsUseCase: 연도별 통계 조회
  • Domain Models:
    • EmotionStatistics: 감정별 통계 데이터
    • ArtistStatistics: 아티스트별 통계 데이터
    • PeriodStatistics: 기간별 통계 데이터

2. Data Layer

  • StatisticsRepositoryImpl: Repository 인터페이스 구현
  • DailyTrackDao 확장: 통계를 위한 쿼리 추가
    • 감정별 그룹핑 쿼리
    • 아티스트별 그룹핑 쿼리
    • 날짜 범위별 집계 쿼리

3. UI Layer

  • StatisticsFragment: 통계 화면 (마이 탭 내 또는 별도 탭)
  • StatisticsViewModel: 통계 데이터 상태 관리 (MVI 패턴)
  • StatisticsUiState: UI 상태 모델
  • Chart 라이브러리: MPAndroidChart 또는 차트 라이브러리 활용

주요 구현 사항

  1. DAO 쿼리 최적화

    • Room의 @query를 활용한 집계 쿼리 작성
    • 날짜 인덱스 활용으로 성능 최적화
  2. 시각화

    • 감정 분포: Pie Chart 또는 Bar Chart
    • 아티스트 통계: Horizontal Bar Chart
    • 기간별 추이: Line Chart
  3. 상태 관리

    • StateFlow를 활용한 비동기 데이터 스트림
    • 로딩, 에러, 성공 상태 관리

#️⃣ 작업 상세 내용

  • Domain Layer 구현

    • StatisticsRepository 인터페이스 정의
    • EmotionStatistics, ArtistStatistics, PeriodStatistics 등 Domain Model 정의
    • GetEmotionStatisticsUseCase 구현
    • GetArtistStatisticsUseCase 구현
    • GetMonthlyStatisticsUseCase 구현
    • GetYearlyStatisticsUseCase 구현
  • Data Layer 구현

    • DailyTrackDao에 통계 쿼리 메서드 추가
      • getEmotionCountsByPeriod(startDate, endDate): 기간별 감정 카운트
      • getTopArtistsByPeriod(startDate, endDate, limit): 기간별 인기 아티스트
      • getTracksCountByMonth(year, month): 월별 음악 개수
      • getTracksCountByYear(year): 연도별 음악 개수
    • StatisticsRepositoryImpl 구현
  • UI Layer 구현

    • StatisticsFragment 생성 및 레이아웃 작성
    • StatisticsViewModel 구현 (MVI 패턴)
    • StatisticsUiState 모델 정의
    • 통계 카드 UI 컴포넌트 구현
      • 감정 통계 카드
      • 아티스트 TOP 10 카드
      • 월별/연도별 추이 카드
    • 차트 라이브러리 통합 및 차트 컴포넌트 구현
  • Navigation 설정

    • 통계 화면으로의 네비게이션 경로 추가
    • 마이 탭 또는 별도 탭에 통계 메뉴 추가
  • 의존성 주입 (Hilt)

    • StatisticsRepository 바인딩
    • UseCase 바인딩
    • ViewModel 바인딩
  • 테스트

    • UseCase 단위 테스트
    • Repository 단위 테스트
    • DAO 쿼리 테스트
  • 문자열 리소스 추가

    • 통계 관련 문자열 리소스 추가 (한국어/영어)

📎 참고할만한 자료 (선택)

차트 라이브러리

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions