feat: add daily streak tracking for contributions and edits

Key Features Added:

  1. 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
  1. 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
  1. 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.

Merge request reports

Loading