Skip to content

feat(contributions): global milestones#3971

Merged
idoshamun merged 1 commit into
mainfrom
feat/contribution-milestones
Jul 2, 2026
Merged

feat(contributions): global milestones#3971
idoshamun merged 1 commit into
mainfrom
feat/contribution-milestones

Conversation

@idoshamun

Copy link
Copy Markdown
Member

Adds DB-driven global milestones for the giveback launch. Pull-only (no broadcast) — the client polls the last reached milestone for the header gift-icon animation.

What's included

  • ContributionMilestone entity (value unique / title / active / sortOrder / reachedAt) + migration.
  • Detection on the approved-submission event (api.v1.contribution-action-completed): sum lifetime approved points, idempotently stamp any crossed milestones (UPDATE ... WHERE value <= :total AND reachedAt IS NULL), refresh the poll cache. Low-frequency event, so no counter/cron and no drift.
  • contributionLastReachedMilestone query — the single high-frequency poll, served from a tiny Redis cache (contribution:last-milestone, 60s TTL), deliberately kept out of the heavy contributionStatus aggregates.
  • Private admin CRUD for milestones (POST/PATCH/DELETE /contributions/milestones).

Notes

  • Milestone metric = total approved points, lifetime. Thresholds are admin-managed, not hardcoded.
  • Generated migration was cleaned to only the table + 2 indexes (IF NOT EXISTS, no CONCURRENTLY).

First of 3 PRs for the giveback launch (next: first-1k founding award; leaderboard + causes breakdown).

@pulumi

pulumi Bot commented Jul 2, 2026

Copy link
Copy Markdown

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

Resource Changes

    Name                                                       Type                                  Operation
~   vpc-native-update-tags-str-cron                            kubernetes:batch/v1:CronJob           update
~   vpc-native-materialize-yearly-best-post-archives-cron      kubernetes:batch/v1:CronJob           update
~   vpc-native-user-posts-analytics-refresh-cron               kubernetes:batch/v1:CronJob           update
~   vpc-native-calculate-top-readers-cron                      kubernetes:batch/v1:CronJob           update
~   vpc-native-user-profile-updated-sync-cron                  kubernetes:batch/v1:CronJob           update
~   vpc-native-clean-zombie-users-cron                         kubernetes:batch/v1:CronJob           update
~   vpc-native-channel-digests-cron                            kubernetes:batch/v1:CronJob           update
~   vpc-native-rotate-weekly-quests-cron                       kubernetes:batch/v1:CronJob           update
~   vpc-native-check-analytics-report-cron                     kubernetes:batch/v1:CronJob           update
~   vpc-native-update-source-public-threshold-cron             kubernetes:batch/v1:CronJob           update
~   vpc-native-ws-deployment                                   kubernetes:apps/v1:Deployment         update
~   vpc-native-update-tag-materialized-views-cron              kubernetes:batch/v1:CronJob           update
~   vpc-native-validate-active-users-cron                      kubernetes:batch/v1:CronJob           update
~   vpc-native-hourly-notification-cron                        kubernetes:batch/v1:CronJob           update
~   vpc-native-post-analytics-clickhouse-cron                  kubernetes:batch/v1:CronJob           update
~   vpc-native-clean-old-notifications-cron                    kubernetes:batch/v1:CronJob           update
~   vpc-native-deployment                                      kubernetes:apps/v1:Deployment         update
~   vpc-native-clean-zombie-images-cron                        kubernetes:batch/v1:CronJob           update
+   api-sub-api.contribution-action-completed-milestone        gcp:pubsub/subscription:Subscription  create
~   vpc-native-user-profile-analytics-history-clickhouse-cron  kubernetes:batch/v1:CronJob           update
~   vpc-native-generic-referral-reminder-cron                  kubernetes:batch/v1:CronJob           update
~   vpc-native-clean-expired-better-auth-sessions-cron         kubernetes:batch/v1:CronJob           update
~   vpc-native-expire-super-agent-trial-cron                   kubernetes:batch/v1:CronJob           update
-   vpc-native-api-clickhouse-migration-758c8751               kubernetes:batch/v1:Job               delete
~   vpc-native-channel-highlights-cron                         kubernetes:batch/v1:CronJob           update
~   vpc-native-worker-job-deployment                           kubernetes:apps/v1:Deployment         update
~   vpc-native-temporal-deployment                             kubernetes:apps/v1:Deployment         update
~   vpc-native-post-lifecycle-state-clickhouse-cron            kubernetes:batch/v1:CronJob           update
~   vpc-native-post-analytics-achievements-cron                kubernetes:batch/v1:CronJob           update
~   vpc-native-private-deployment                              kubernetes:apps/v1:Deployment         update
+   vpc-native-api-clickhouse-migration-c1b31b6a               kubernetes:batch/v1:Job               create
~   vpc-native-rotate-daily-quests-cron                        kubernetes:batch/v1:CronJob           update
~   vpc-native-update-trending-cron                            kubernetes:batch/v1:CronJob           update
~   vpc-native-subscription-anniversary-achievements-cron      kubernetes:batch/v1:CronJob           update
~   vpc-native-update-views-cron                               kubernetes:batch/v1:CronJob           update
~   vpc-native-clean-zombie-user-companies-cron                kubernetes:batch/v1:CronJob           update
~   vpc-native-update-current-streak-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-clean-stale-user-transactions-cron              kubernetes:batch/v1:CronJob           update
~   vpc-native-daily-digest-cron                               kubernetes:batch/v1:CronJob           update
... and 16 other changes

Add DB-driven global milestones for the giveback launch.

- ContributionMilestone entity (value/title/active/sortOrder/reachedAt) + migration
- Detection on the approved-submission event: sum lifetime approved points,
  idempotently stamp any crossed milestones, refresh the poll cache
- Public contributionMilestones (ladder) + cached contributionLastReachedMilestone
  poll (redis, 60s TTL) kept out of the heavy contributionStatus aggregates
- Private admin CRUD for milestones
@idoshamun idoshamun force-pushed the feat/contribution-milestones branch from e49f1ac to cb63883 Compare July 2, 2026 10:46
@idoshamun idoshamun merged commit 288aa5d into main Jul 2, 2026
8 checks passed
@idoshamun idoshamun deleted the feat/contribution-milestones branch July 2, 2026 10:58
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