public async Task <AchievementProgressViewModel> GetAchievementProgressForUserAsync(string userId, int milestoneTypeId) { var milestones = from milestone in db.Milestones where milestone.MilestoneTypeId == milestoneTypeId orderby milestone.Id select milestone; var results = await milestones.ToListAsync(); AchievementProgressViewModel v = new AchievementProgressViewModel(); foreach (var milestone in results) { v.AchievedCount = await GetAchievedAmountForUserAsync(userId, milestoneTypeId); v.AchievementIconPath = MilestoneExtensions.GetImagePath(milestone.IconFileName); v.RequiredCount = milestone.AmountRequired; // user hasn't reached the required amount yet to go beyond this milestone, break and use this milestone if (v.AchievedCount < v.RequiredCount) { break; } //// if the user has not achieved this milestone, break and use it //bool hasUserAchievedMilestone = milestone.MilestonesAchieved.Any(x => x.UserId == userId); //if (milestone.MilestonesAchieved == null || (milestone.MilestonesAchieved != null && milestone.MilestonesAchieved.Count == 0)) //{ // break; //} } return(v); }
public async Task <IReadOnlyCollection <AchievementFeedViewModel> > GetFollowerAchievementsAsync(string userId) { var achievements = from achievement in db.MilestoneAchievements join favoritedProfiles in db.FavoriteProfiles on achievement.User.Profile.Id equals favoritedProfiles.ProfileId where favoritedProfiles.UserId == userId where achievement.User.IsActive select new AchievementFeedViewModel() { AchievementIconPath = achievement.Milestone.IconFileName, MilestoneAmountRequired = achievement.Milestone.AmountRequired, MilestoneTypeName = achievement.Milestone.MilestoneType.Name, DateAchieved = achievement.DateAchieved, ProfileId = achievement.User.Profile.Id, UserName = achievement.User.UserName, UserProfileImagePath = achievement.User.Profile.UserImage.FileName }; var results = await achievements.ToListAsync(); foreach (var result in results) { result.UserProfileImagePath = ProfileExtensions.GetThumbnailImagePath(result.UserProfileImagePath); result.AchievementIconPath = MilestoneExtensions.GetImagePath(result.AchievementIconPath); } return(results.AsReadOnly()); }
private async Task <IReadOnlyCollection <AchievementOverviewViewModel> > GetSoloAchievementOverviewsAsync(string userId, IEnumerable <Milestone> soloMilestones) { var soloMilestoneIds = soloMilestones.Select(x => x.Id).ToList(); var completedMilestones = await(from achievements in db.MilestoneAchievements where achievements.UserId == userId where soloMilestoneIds.Contains(achievements.MilestoneId) select achievements) .ToDictionaryAsync(x => x.MilestoneId, x => x.Milestone); List <AchievementOverviewViewModel> achievementOverviews = new List <AchievementOverviewViewModel>(); foreach (var soloMilestone in soloMilestones) { var achievementOverview = new AchievementOverviewViewModel() { AchievementTypeName = soloMilestone.MilestoneType.Name, AchievementDescription = soloMilestone.MilestoneType.Description, AchievementStatuses = new List <AchievementStatusViewModel>() }; int achievedCount = HasUserCompletedAchievement(completedMilestones, soloMilestone); achievementOverview.AchievementStatuses.Add(new AchievementStatusViewModel() { AchievedCount = achievedCount, RequiredCount = soloMilestone.AmountRequired, AchievementIconPath = soloMilestone.IconFileName }); achievementOverviews.Add(achievementOverview); } foreach (var achievementOverview in achievementOverviews) { // this will always only be a single item for solo achievements foreach (var achievementStatus in achievementOverview.AchievementStatuses) { achievementStatus.AchievementIconPath = MilestoneExtensions.GetImagePath(achievementStatus.AchievementIconPath); } } return(achievementOverviews.AsReadOnly()); }
public async Task <IReadOnlyCollection <AchievementUnlockedViewModel> > GetMilestoneDetailsAsync(IReadOnlyCollection <int> milestoneIdsUnlocked) { var milestones = from milestone in db.Milestones where milestoneIdsUnlocked.Contains(milestone.Id) select new AchievementUnlockedViewModel() { AchievementName = milestone.MilestoneType.Name, AchievementIconPath = milestone.IconFileName }; var result = await milestones.ToListAsync(); foreach (var milestone in result) { milestone.AchievementIconPath = MilestoneExtensions.GetImagePath(milestone.AchievementIconPath); } return(result.AsReadOnly()); }
public async Task <IReadOnlyCollection <AchievementCompletedViewModel> > GetCompletedAchievementsAsync(string userId) { var completedAchievements = from achievements in db.MilestoneAchievements where achievements.UserId == userId where achievements.ShowInAchievementShowcase == false select new AchievementCompletedViewModel() { MilestoneId = achievements.MilestoneId, MilestoneImagePath = achievements.Milestone.IconFileName, MilestoneName = achievements.Milestone.MilestoneType.Name }; var results = await completedAchievements.ToListAsync(); foreach (var result in results) { result.MilestoneImagePath = MilestoneExtensions.GetImagePath(result.MilestoneImagePath); } return(results); }