public async Task RewardReferralAsync(ApplicationUser userWhoReceivedReferral, string referralCode)
        {
            Debug.Assert(userWhoReceivedReferral != null);
            Debug.Assert(!String.IsNullOrEmpty(referralCode));

            var referral = await db.Referrals.FindAsync(referralCode);

            var userWhoSentReferral = referral.ApplicationUser;

            // reward the users somehow
            // points
            // title
            // achievement

            userWhoReceivedReferral.IncreasePoints(100);

            // only reward the referral user if they are still active
            if (userWhoSentReferral.IsActive)
            {
                userWhoSentReferral.IncreasePoints(100);
            }

            referral.IsRedeemed = true;

            await db.SaveChangesAsync();

            await MilestoneService.AwardAchievedMilestonesAsync(userWhoSentReferral.Id, (int)MilestoneTypeValues.ReferralSignUps);
        }
        internal static MilestoneService Create(IdentityFactoryOptions <MilestoneService> options, IOwinContext context)
        {
            var service = new MilestoneService(context.Get <ApplicationDbContext>(), new EmailService());

            return(service);
        }