This will be triggered whenever a user earns a badge. Also, assume all relationships for each query are fulfilled.
- Find related milestones,
relatedMilestones
:MilestoneBadges.get({ badgeId: <badgeId> })
- Return early if there are no related milestones.
- Get list of user's badges,
userBadges
:BadgeInstances.get({ email: <userEmail> })
- Get the relative complement of
userBadges
andrelatedMilestones
(related milestone badges the user has not earned yet) to make set ofunearnedMilestones
.
- Return early if the relative complement set is empty.
- Filter
unearnedMilestones
by eligibility for fulfillment to geteligibleMilestones