Skip to content

feat(contributions): leaderboard and cause breakdown#3973

Merged
idoshamun merged 2 commits into
mainfrom
feat/contribution-leaderboard
Jul 2, 2026
Merged

feat(contributions): leaderboard and cause breakdown#3973
idoshamun merged 2 commits into
mainfrom
feat/contribution-leaderboard

Conversation

@idoshamun

Copy link
Copy Markdown
Member

Read-only giveback-page queries for the current cycle (unpaid approved points). No schema changes.

Queries

  • contributionLeaderboard(first, after) — ranked entries (user, points, rank), current cycle only. Built as a GraphORM aggregation grouped by user with a ROW_NUMBER() window for rank (mirrors the existing userContributionCauseStats pattern). Finalized/paid submissions are excluded, so the board resets each payout cycle.
  • contributionUserRank (@auth) — the viewer's own points + rank, null when they have no current-cycle points. Lets the client show "your rank" even when off-page.
  • contributionCauseBreakdown — projects the current cycle across cause categories: each contributor's points split equally among their preferred active causes (falling back to all active causes, matching payout allocation), rolled up by category. Shares sum to the whole, so it renders as a clean pie. Points only (the cycle has no $ allocated yet).

Notes

  • All reads go to the read replica (leaderboard via the shared connection helper's replica flag; the two aggregations via queryReadReplica).
  • Leaderboard + breakdown are public (like the status/sponsor queries); contributionUserRank is auth-gated.
  • Ordering/tie-break is deterministic: points desc, then earliest contribution, then userId.

PR 3 of 3 for the giveback launch (milestones #3971, founding award #3972 already merged).

Read-only giveback page queries for the current cycle (unpaid approved points).

- contributionLeaderboard: ranked entries (user, points, rank) via GraphORM
  aggregation with a ROW_NUMBER window; excludes finalized (paid) submissions
- contributionUserRank: the viewer's own points + rank, null when unranked
- contributionCauseBreakdown: projects current-cycle points split equally across
  each contributor's preferred active causes (fallback: all active), rolled up by
  cause category so shares sum to the whole
- All read-replica; no schema changes
@pulumi

pulumi Bot commented Jul 2, 2026

Copy link
Copy Markdown

🍹 The Update (preview) for dailydotdev/api/prod (at b075de5) was successful.

Resource Changes

    Name                                                       Type                           Operation
~   vpc-native-calculate-top-readers-cron                      kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-zombie-user-companies-cron                kubernetes:batch/v1:CronJob    update
~   vpc-native-squad-posts-analytics-refresh-cron              kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-expired-better-auth-sessions-cron         kubernetes:batch/v1:CronJob    update
+   vpc-native-api-db-migration-6b9b6af2                       kubernetes:batch/v1:Job        create
~   vpc-native-update-current-streak-cron                      kubernetes:batch/v1:CronJob    update
~   vpc-native-temporal-deployment                             kubernetes:apps/v1:Deployment  update
~   vpc-native-update-tags-str-cron                            kubernetes:batch/v1:CronJob    update
-   vpc-native-api-clickhouse-migration-387ad8dd               kubernetes:batch/v1:Job        delete
~   vpc-native-user-profile-updated-sync-cron                  kubernetes:batch/v1:CronJob    update
~   vpc-native-user-posts-analytics-refresh-cron               kubernetes:batch/v1:CronJob    update
~   vpc-native-hourly-notification-cron                        kubernetes:batch/v1:CronJob    update
~   vpc-native-generate-search-invites-cron                    kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-zombie-users-cron                         kubernetes:batch/v1:CronJob    update
~   vpc-native-materialize-yearly-best-post-archives-cron      kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-zombie-opportunities-cron                 kubernetes:batch/v1:CronJob    update
~   vpc-native-post-analytics-clickhouse-cron                  kubernetes:batch/v1:CronJob    update
~   vpc-native-update-highlighted-views-cron                   kubernetes:batch/v1:CronJob    update
~   vpc-native-rotate-daily-quests-cron                        kubernetes:batch/v1:CronJob    update
~   vpc-native-update-trending-cron                            kubernetes:batch/v1:CronJob    update
~   vpc-native-post-lifecycle-state-clickhouse-cron            kubernetes:batch/v1:CronJob    update
~   vpc-native-daily-digest-cron                               kubernetes:batch/v1:CronJob    update
~   vpc-native-sync-subscription-with-cio-cron                 kubernetes:batch/v1:CronJob    update
~   vpc-native-channel-digests-cron                            kubernetes:batch/v1:CronJob    update
~   vpc-native-expire-super-agent-trial-cron                   kubernetes:batch/v1:CronJob    update
~   vpc-native-check-analytics-report-cron                     kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-gifted-plus-cron                          kubernetes:batch/v1:CronJob    update
~   vpc-native-deployment                                      kubernetes:apps/v1:Deployment  update
~   vpc-native-personalized-digest-deployment                  kubernetes:apps/v1:Deployment  update
~   vpc-native-generic-referral-reminder-cron                  kubernetes:batch/v1:CronJob    update
~   vpc-native-personalized-digest-cron                        kubernetes:batch/v1:CronJob    update
~   vpc-native-materialize-monthly-best-post-archives-cron     kubernetes:batch/v1:CronJob    update
~   vpc-native-clean-channel-highlights-cron                   kubernetes:batch/v1:CronJob    update
~   vpc-native-user-profile-analytics-history-clickhouse-cron  kubernetes:batch/v1:CronJob    update
~   vpc-native-update-tag-materialized-views-cron              kubernetes:batch/v1:CronJob    update
~   vpc-native-worker-job-deployment                           kubernetes:apps/v1:Deployment  update
~   vpc-native-clean-zombie-images-cron                        kubernetes:batch/v1:CronJob    update
~   vpc-native-update-source-public-threshold-cron             kubernetes:batch/v1:CronJob    update
~   vpc-native-rotate-weekly-quests-cron                       kubernetes:batch/v1:CronJob    update
~   vpc-native-post-analytics-history-day-clickhouse-cron      kubernetes:batch/v1:CronJob    update
~   vpc-native-user-profile-analytics-clickhouse-cron          kubernetes:batch/v1:CronJob    update
... and 15 other changes

Address code review of the leaderboard/breakdown queries.

- Cause breakdown: round fractional category shares with the largest-remainder
  method so the parts still sum to the total (per-category ROUND could drop a
  point and contradicted the "sums to the whole" contract)
- User rank: use COALESCE(SUM,0) in the window ordering to match the leaderboard
  ordering exactly
@idoshamun idoshamun merged commit 9a0290b into main Jul 2, 2026
9 checks passed
@idoshamun idoshamun deleted the feat/contribution-leaderboard branch July 2, 2026 13:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant