예제 #1
0
        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);
        }