private async Task <List <ProjectCompactViewModel> > GetCompactProjectsList(IEnumerable <IProjectData> projectList) { var compactModels = await CompactProjectList.CreateCompactProjectList( projectList, _commentsRepository, _participantsRepository, _projectFollowRepository, _resultsRepository, _winnersRepository, UserModel.GetAuthenticatedUser(User.Identity).Email, _personalDataService, _streamsIdRepository ); /* TODO: Move these from side effects to checks at object creation time*/ foreach (var project in projectList) { // if the project has no author, use the ClaimsHelper to get the AuthorIdentifier from the AuthorID and // fill it in //if (string.IsNullOrEmpty(project.AuthorIdentifier)) //{ // project.AuthorIdentifier = await ClaimsHelper.GetUserIdByEmail( // _settings.LykkeStreams.Authentication.Authority, _settings.LykkeStreams.Authentication.ClientId, // project.AuthorId); // await _projectRepository.UpdateAsync(project); //} // if the project is missing the enum status, fill it in from the string if (!string.IsNullOrEmpty(project.ProjectStatus)) { project.Status = StatusHelper.GetProjectStatusFromString(project.ProjectStatus); } } return(compactModels.GetProjects()); }
private async Task <List <ProjectCompactViewModel> > GetCompactProjectsList(IEnumerable <IProjectData> projects) { var compactModels = new List <ProjectCompactViewModel>(); var user = UserModel.GetAuthenticatedUser(User.Identity); foreach (var project in projects) { var projectCommentsCount = await _commentsRepository.GetProjectCommentsCountAsync(project.Id); var participantsCount = await _participantsRepository.GetProjectParticipantsCountAsync(project.Id); var resultsCount = await _resultsRepository.GetResultsCountAsync(project.Id); var winnersCount = await _winnersRepository.GetWinnersCountAsync(project.Id); var tagsList = new List <string>(); if (!string.IsNullOrEmpty(project.Tags)) { tagsList = JsonConvert.DeserializeObject <List <string> >(project.Tags); } var following = false; if (user.Email != null) { var follow = await _projectFollowRepository.GetAsync(user.Email, project.Id); if (follow != null) { following = true; } } if (string.IsNullOrEmpty(project.AuthorIdentifier)) { var profile = await _personalDataService.FindClientsByEmail(project.AuthorId); if (profile != null) { project.AuthorIdentifier = profile.Id; await _projectRepository.UpdateAsync(project); } } var compactModel = new ProjectCompactViewModel { CommentsCount = projectCommentsCount, ParticipantsCount = participantsCount, ResultsCount = resultsCount, WinnersCount = winnersCount, Tags = tagsList, BaseProjectData = project }; if (!string.IsNullOrEmpty(project.ProjectStatus)) { compactModel.BaseProjectData.Status = StatusHelper.GetProjectStatusFromString(project.ProjectStatus); } compactModels.Add(compactModel); } compactModels = await CompactProjectList.FetchAuthorAvatars(compactModels, _personalDataService); compactModels = await CompactProjectList.FetchAuthorStreamsIds(compactModels, _streamsIdRepository); return(compactModels); }