Skip to content

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

Open
palxsh01 wants to merge 7 commits into
Priyanshu-byte-coder:mainfrom
palxsh01:main
Open

[Fix] #1312 Streak logic duplication resolved.#1876
palxsh01 wants to merge 7 commits 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
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) 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