feat: add daily streak tracking for contributions and edits
Key Features Added:
- Streak Calculation Service (app/services/streak_service.py):
- Contributions Streak: Tracks daily uploads using Record.created_at timestamps
- Edits Streak: Tracks daily edits using RecordHistory.created_at timestamps
- Combined Streak: Tracks days with either contributions OR edits
- Smart Logic:
- Current streak continues if last activity was today or yesterday
- Calculates longest streak ever achieved
- Provides comprehensive statistics
- New API Endpoints:
- GET /users/{user_id}/streaks: Complete streak information (contributions, edits, combined)
- GET /users/{user_id}/activity-timeline: Daily activity counts over customizable period (1-365 days)
- GET /users/{user_id}/profile-summary: Enhanced profile with contributions, edits, and streaks combined
- Schema Definitions:
- StreakData: Individual streak information (current, longest, dates, totals)
- UserStreaks: Complete user streak package
- DailyActivity: Daily activity breakdown by type
- UserActivityTimeline: Timeline view of daily activities
API Usage Examples:
Get user streaks
GET /api/v1/users/{user_id}/streaks
Get 30-day activity timeline
GET /api/v1/users/{user_id}/activity-timeline?days=30
Get comprehensive profile with streaks
GET /api/v1/users/{user_id}/profile-summary
The implementation leverages existing data (upload timestamps and edit history) without requiring additional database tables or migrations, making it efficient and immediately functional with your current data.