Skip to content

[Fix] #1312 Streak logic duplication resolved.#1870

Closed
palxsh01 wants to merge 2 commits into
Priyanshu-byte-coder:mainfrom
palxsh01:fix/1312/streak-calculation-logic
Closed

[Fix] #1312 Streak logic duplication resolved.#1870
palxsh01 wants to merge 2 commits into
Priyanshu-byte-coder:mainfrom
palxsh01:fix/1312/streak-calculation-logic

Conversation

@palxsh01
Copy link
Copy Markdown

@palxsh01 palxsh01 commented Jun 2, 2026

Summary

Extracts the duplicated streak calculation algorithm into a single shared module
at src/lib/streak.ts, removing ~230 lines of copy-pasted logic spread across
6 source files. Also fixes two sil consolidation.

Closes #1312


Type of Change

  • Bug fix
  • New feature
  • Documentation update
  • Refactor / code cleanup

Changes Made

  • Created src/lib/streak.ts exposing two shared exports:
    • calculateStreakFromDates(activeDates, freezeDates?) — full calculation with freeze date support
    • calculateCurrentStreak(dates) — lightweight wrapper returning only the current streak number
  • Removed inline streak logic from 6 source files: streak/route.ts, streak-shield/route.ts, public-profile-data.ts, compare/route.ts, leaderboard/route.ts, weekly-summary/route.ts
  • Updated calculateStreakFromDates.test.ts and leaderboard-streak.test.ts to import from the shared module instead of maintaining local copies
  • Fixed silent bug in compare/route.ts where longestStreak was never tracked — endpoint returned only current streak
  • Fixed behavioral divergence in streak-shield/route.ts where dateDiffDays used Date.UTC() instead of ISO string truncation, causing off-by-one results for users near UTC midnight

How to Test

  1. Run npm run type-check — should pass with no errors
  2. Run npm test — all 285 tests should pass
  3. Run npm run lint — should pass
  4. Manually verify that /api/metrics/streak, /api/badge/streak-shield, and
    /api/public/[username] return consistent streak values for the same GitHub user

Screenshots (if UI change)

N/A — backend refactor only, no UI changes.


Checklist

  • Linked issue in summary
  • npm run lint passes locally
  • No TypeScript errors (npm run type-check)
  • Self-reviewed the diff
  • Added/updated tests if applicable

Accessibility Checklist

  • Proper keyboard navigation tested
  • Responsive UI verified
  • Accessibility labels added where needed

Additional Notes

All existing tests continue to pase follows the same commentingconventions as the rest of src/lib/ — inline // comments for non-obvious constraints, a short JSDoc block on the exported function.

…ore logic abstracted to src/lib/streak.ts.
@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 2, 2026

@palxsh01 is attempting to deploy a commit to the PRIYANSHU DOSHI's projects Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions github-actions Bot added gssoc26 GSSoC 2026 contribution type:testing GSSoC type bonus: tests (+10 pts) labels Jun 2, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 2, 2026

GSSoC Label Checklist 🏷️

@Priyanshu-byte-coder — please apply the appropriate labels before merging:

Difficulty (pick one):

  • level:beginner — 20 pts
  • level:intermediate — 35 pts
  • level:advanced — 55 pts
  • level:critical — 80 pts

Quality (optional):

  • quality:clean — ×1.2 multiplier
  • quality:exceptional — ×1.5 multiplier

Validation (required to score):

  • gssoc:approved — counts for points
  • gssoc:invalid / gssoc:spam / gssoc:ai-slop — does not score

Type labels (type:*) are auto-detected from files and title. Review and adjust if needed.
Points formula: (difficulty × quality_multiplier) + type_bonus

Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your first PR on DevTrack! 🎉

A maintainer will review it within 48 hours. While you wait:

  • Make sure CI is passing (type-check + lint)
  • Double-check the PR description is filled out and the issue is linked
  • Feel free to ask questions in Discussions if you need help

If you find DevTrack useful, a ⭐ star on the repo is always appreciated — it helps the project grow and attract more contributors!

@palxsh01 palxsh01 closed this Jun 2, 2026
@palxsh01
Copy link
Copy Markdown
Author

palxsh01 commented Jun 2, 2026

Branch was updated and multiple merge conflicts have arised. Resolving merge conflicts and will open a new PR for a clean merge into main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gssoc26 GSSoC 2026 contribution type:testing GSSoC type bonus: tests (+10 pts)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Streak Calculation Logic Duplicated Across 6+ Files

1 participant