public async Task <IReferralLinksStatistics> GetStatistics(string senderClientId) { var statistics = new ReferralLinksStatistics(); var referralLinksForSender = (await _referralLinkRepository.GetReferralLinksBySenderId(senderClientId)).ToList(); var invitationLinks = referralLinksForSender.Where(r => r.Type == ReferralLinkType.Invitation.ToString()).ToList(); statistics.NumberOfInvitationLinksSent = invitationLinks.Count(); var claims = (await _referralLinkClaimsRepository.GetClaimsForRefLinks(invitationLinks.Select(r => r.Id))).Where(l => l.RecipientClientId != senderClientId); statistics.NumberOfInvitationLinksAccepted = claims.Count(); statistics.NumberOfGiftLinksSent = referralLinksForSender.Count(r => r.Type == ReferralLinkType.GiftCoins.ToString()); statistics.AmountOfGiftCoinsDistributed = referralLinksForSender .Where(x => x.Type == ReferralLinkType.GiftCoins.ToString() && x.State == ReferralLinkState.Claimed.ToString()) .Sum(x => x.Amount); statistics.NumberOfNewUsersBroughtIn = (await _referralLinkClaimsRepository.GetClaimsForRefLinks(referralLinksForSender.Select(r => r.Id))).Count(r => r.IsNewClient); return(statistics); }
public IEnumerable <IReferralLink> GetInvitationLinksForSenderId(string senderClientId) { return((_referralLinkRepository.GetReferralLinksBySenderId(senderClientId)).Result.Where(r => r.Type == ReferralLinkType.Invitation.ToString())); }