feat: 통계 API 구현 (8.1~8.5) (#132) #133

Merged
seonkyu.kim merged 2 commits from feature/#132-stats-api into develop 2026-02-10 14:11:28 +00:00
Owner

📋 작업 요약

Stats API 5종 구현 (API Specification §8). DailyStat 테이블 + PushSendLog 집계 기반.

Closes #132

🛠️ 작업 내용 (Changes)

새 파일 (13개)

  • StatsController.cs — 5개 엔드포인트
  • IStatsService.cs / StatsService.cs — 통계 서비스
  • IDailyStatRepository.cs / DailyStatRepository.cs — 일별 통계 Repository
  • DTOs 8개 (DailyStatRequest/Response, SummaryStatResponse, MessageStatRequest/Response, HourlyStatRequest/Response, DeviceStatResponse)

수정 파일 (4개)

  • IPushSendLogRepository.cs — 시간대별/메시지별 통계 집계 메서드 추가
  • PushSendLogRepository.cs — 구현 (GroupBy Hour, GroupBy Date)
  • Application/DependencyInjection.cs — IStatsService 등록
  • Infrastructure/DependencyInjection.cs — IDailyStatRepository 등록

API 엔드포인트

API URI 설명
8.1 POST /v1/in/stats/daily 기간별 일별 통계 (DailyStat 테이블)
8.2 POST /v1/in/stats/summary 대시보드 요약 (DailyStat + Device + Message 집계)
8.3 POST /v1/in/stats/message 메시지별 통계 (PushSendLog 집계)
8.4 POST /v1/in/stats/hourly 시간대별 추이 (PushSendLog Hour GroupBy)
8.5 POST /v1/in/stats/device 디바이스 분포 (Platform/PushAgreed/Tag별)

📢 리뷰어 참고 사항 (To Reviewers)

  • open_count/ctr은 DailyStat에서만 제공 (8.1, 8.2). PushSendLog 기반 API(8.3, 8.4)는 PushOpenLog 테이블 미구현으로 0 반환
  • Device 태그 통계는 Tags 필드를 comma split하여 집계
  • 날짜 유효성 검사: yyyy-MM-dd 형식 필수, start > end 시 400 에러

체크리스트 (Self Checklist)

  • 빌드 성공 (경고/오류 0개)
  • API 응답 형식 ApiResponse<T> 사용
  • Entity 외부 노출 없이 DTO 사용
  • async/await 일관 적용
  • Clean Architecture 계층 규칙 준수

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

빌드 결과: 경고 0개, 오류 0개

## 📋 작업 요약 Stats API 5종 구현 (API Specification §8). DailyStat 테이블 + PushSendLog 집계 기반. ## 🔗 관련 이슈 (Related Issues) Closes #132 ## 🛠️ 작업 내용 (Changes) ### 새 파일 (13개) - `StatsController.cs` — 5개 엔드포인트 - `IStatsService.cs` / `StatsService.cs` — 통계 서비스 - `IDailyStatRepository.cs` / `DailyStatRepository.cs` — 일별 통계 Repository - DTOs 8개 (DailyStatRequest/Response, SummaryStatResponse, MessageStatRequest/Response, HourlyStatRequest/Response, DeviceStatResponse) ### 수정 파일 (4개) - `IPushSendLogRepository.cs` — 시간대별/메시지별 통계 집계 메서드 추가 - `PushSendLogRepository.cs` — 구현 (GroupBy Hour, GroupBy Date) - `Application/DependencyInjection.cs` — IStatsService 등록 - `Infrastructure/DependencyInjection.cs` — IDailyStatRepository 등록 ### API 엔드포인트 | API | URI | 설명 | |-----|-----|------| | 8.1 | `POST /v1/in/stats/daily` | 기간별 일별 통계 (DailyStat 테이블) | | 8.2 | `POST /v1/in/stats/summary` | 대시보드 요약 (DailyStat + Device + Message 집계) | | 8.3 | `POST /v1/in/stats/message` | 메시지별 통계 (PushSendLog 집계) | | 8.4 | `POST /v1/in/stats/hourly` | 시간대별 추이 (PushSendLog Hour GroupBy) | | 8.5 | `POST /v1/in/stats/device` | 디바이스 분포 (Platform/PushAgreed/Tag별) | ## 📢 리뷰어 참고 사항 (To Reviewers) - `open_count`/`ctr`은 DailyStat에서만 제공 (8.1, 8.2). PushSendLog 기반 API(8.3, 8.4)는 PushOpenLog 테이블 미구현으로 0 반환 - Device 태그 통계는 Tags 필드를 comma split하여 집계 - 날짜 유효성 검사: yyyy-MM-dd 형식 필수, start > end 시 400 에러 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드 성공 (경고/오류 0개) - [x] API 응답 형식 `ApiResponse<T>` 사용 - [x] Entity 외부 노출 없이 DTO 사용 - [x] async/await 일관 적용 - [x] Clean Architecture 계층 규칙 준수 ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) 빌드 결과: `경고 0개, 오류 0개`
seonkyu.kim added 2 commits 2026-02-10 14:10:17 +00:00
- POST /v1/in/stats/daily: 기간별 일별 통계
- POST /v1/in/stats/summary: 대시보드 요약 통계
- POST /v1/in/stats/message: 메시지별 발송 통계
- POST /v1/in/stats/hourly: 시간대별 발송 추이
- POST /v1/in/stats/device: 디바이스 분포 통계
- IDailyStatRepository, DailyStatRepository 신규
- IPushSendLogRepository 통계 메서드 확장

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
seonkyu.kim added the
Priority
High
Status
In Progress
Type
Feature
labels 2026-02-10 14:10:24 +00:00
seonkyu.kim added this to the Phase 3-2: 통계 & Webhook & 배치 milestone 2026-02-10 14:10:27 +00:00
seonkyu.kim self-assigned this 2026-02-10 14:10:33 +00:00
seonkyu.kim requested review from Owners 2026-02-10 14:10:37 +00:00
seonkyu.kim merged commit e0f7d422c3 into develop 2026-02-10 14:11:28 +00:00
seonkyu.kim deleted branch feature/#132-stats-api 2026-02-10 14:11:42 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-10 14:11:44 +00:00
Sign in to join this conversation.
No description provided.