-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
#️⃣ 요청 유형
해당되는 항목을 선택해주세요.
-
새로운 기능 추가
-
기존 기능 개선
-
성능 개선
#️⃣ 어떤 기능인가요?
추가하려는 기능 또는 개선하려는 부분에 대해 간결하게 설명해주세요.
사용자가 기록한 음악과 감정 데이터를 분석하여 다양한 통계 정보를 제공하는 기능입니다.
주요 통계 항목:
- 감정 통계: 월별/연도별 감정 분포 및 패턴 분석
- 아티스트 통계: 가장 많이 들은 아티스트 TOP 10
- 음악 통계: 가장 많이 들은 곡, 총 기록된 음악 개수
- 기간별 통계: 일별/주별/월별/연도별 음악 기록 추이
- 시각화: 감정 패턴, 아티스트 분포 등을 그래프/차트로 표현
#️⃣ 이 기능이 필요한 이유는 무엇인가요?
이 기능이 왜 필요한지, 또는 개선/성능 향상이 필요한 이유에 대해 설명해주세요.
- 사용자 인사이트 제공: 사용자가 자신의 감정 패턴과 음악 선호도를 한눈에 파악할 수 있어 앱의 가치를 높입니다.
- 데이터 활용: 이미 수집되고 있는 DailyTrack 데이터를 활용하여 부가 가치를 창출합니다.
- 사용자 참여도 향상: 통계를 통해 사용자가 자신의 기록에 대해 더 관심을 갖게 되고, 지속적인 사용을 유도할 수 있습니다.
구현 방안 (선택)
이 기능을 어떻게 구현할 수 있을지에 대한 아이디어를 간단히 설명해주세요.
아키텍처 구조 (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 또는 차트 라이브러리 활용
주요 구현 사항
-
DAO 쿼리 최적화
- Room의 @query를 활용한 집계 쿼리 작성
- 날짜 인덱스 활용으로 성능 최적화
-
시각화
- 감정 분포: Pie Chart 또는 Bar Chart
- 아티스트 통계: Horizontal Bar Chart
- 기간별 추이: Line Chart
-
상태 관리
- 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 구현
- DailyTrackDao에 통계 쿼리 메서드 추가
-
UI Layer 구현
- StatisticsFragment 생성 및 레이아웃 작성
- StatisticsViewModel 구현 (MVI 패턴)
- StatisticsUiState 모델 정의
- 통계 카드 UI 컴포넌트 구현
- 감정 통계 카드
- 아티스트 TOP 10 카드
- 월별/연도별 추이 카드
- 차트 라이브러리 통합 및 차트 컴포넌트 구현
-
Navigation 설정
- 통계 화면으로의 네비게이션 경로 추가
- 마이 탭 또는 별도 탭에 통계 메뉴 추가
-
의존성 주입 (Hilt)
- StatisticsRepository 바인딩
- UseCase 바인딩
- ViewModel 바인딩
-
테스트
- UseCase 단위 테스트
- Repository 단위 테스트
- DAO 쿼리 테스트
-
문자열 리소스 추가
- 통계 관련 문자열 리소스 추가 (한국어/영어)
📎 참고할만한 자료 (선택)
차트 라이브러리
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request