Skip to content

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

Merged
Priyanshu-byte-coder merged 1 commit into
Priyanshu-byte-coder:mainfrom
palxsh01:main
Jun 3, 2026
Merged

[Fix] #1312 Streak logic duplication resolved.#1876
Priyanshu-byte-coder merged 1 commit into
Priyanshu-byte-coder:mainfrom
palxsh01:main

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 silent bugs uncovered during the 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 pass (285/285). All merge conflicts have been resolved, ready for a clean merge and PR.

@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

@Karanjot786
Copy link
Copy Markdown

Hey @palxsh01! Saw your work on GSSoC 2026.

We are building TermUI, a TypeScript terminal UI framework with React-style hooks and JSX, rendered entirely in the terminal.

We have 99 unassigned GSSoC issues open, including test coverage tasks across the packages. Your TypeScript background transfers directly.

Karanjot, TermUI maintainer

@Priyanshu-byte-coder Priyanshu-byte-coder added gssoc:approved GSSoC: PR approved for scoring level:beginner GSSoC: Beginner difficulty (20 pts) labels Jun 3, 2026
@Priyanshu-byte-coder
Copy link
Copy Markdown
Owner

This PR has merge conflicts with main (which has since received many merges). Please rebase:

git fetch origin
git rebase origin/main
git push --force-with-lease

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

palxsh01 commented Jun 3, 2026

Hi @Priyanshu-byte-coder,
Rebased and fixed the merge conflicts. The PR should merge successfully now. Request you to merge as soon as possible to avoid further merge conflicts.

@Priyanshu-byte-coder Priyanshu-byte-coder added the quality:clean GSSoC: Clean quality multiplier (×1.2) label Jun 3, 2026
@Priyanshu-byte-coder Priyanshu-byte-coder merged commit e2a5d08 into Priyanshu-byte-coder:main Jun 3, 2026
9 of 10 checks passed
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 3, 2026

🎉 Merged! Thanks for contributing to DevTrack.

If the project has been useful to you, a ⭐ star on the repo is the easiest way to support it — it helps DevTrack get discovered by more developers.

Keep an eye on open issues for your next contribution!

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

Labels

gssoc:approved GSSoC: PR approved for scoring gssoc26 GSSoC 2026 contribution level:beginner GSSoC: Beginner difficulty (20 pts) quality:clean GSSoC: Clean quality multiplier (×1.2) 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

3 participants