private void ResolveMentions(string text, SocialBase social) { var mentionIds = new Guid[] { };//_mentionService.GetMentions(text).ToList();//TODO: uncomment when mention service is ready if (mentionIds.Any()) { var links = _activityLinkService.GetLinks(social.Id); const int maxTitleLength = 100; _mentionService.ProcessMention(new MentionModel() { MentionedSourceId = social.Id, CreatorId = _memberService.GetCurrentMemberId(), MentionedUserIds = mentionIds, Title = social.Description.StripHtml().TrimByWordEnd(maxTitleLength), Url = links.Details, ActivityType = IntranetActivityTypeEnum.Social }); } }
public async Task <JobDetails> Execute(IReadOnlyDictionary <string, object> parameters) { var details = new PullRequestJobDetails(); var includeMembers = new Guid[0]; if (parameters.ContainsKey(MembersParameterName)) { includeMembers = (Guid[])parameters[MembersParameterName]; if (includeMembers == null || !includeMembers.Any()) { _logger.LogWarning("Attempt to run PullRequestsSyncJob with empty list of members"); } } await _mediator.Execute(new UpdateActivePullRequests()); var membersAndRepositories = await _mediator.RequestCollection <GetMembersAndRepositoriesOfAllProfiles, RepositoryInfo>(new GetMembersAndRepositoriesOfAllProfiles(includeMembers)); _logger.LogInformation("Found {Count} repositories to scan.", membersAndRepositories.Count()); // TODO: Parallel? var allPullRequests = new List <PullRequestViewModel>(); var allPullRequestsDetails = new List <PullRequestJobDetails.PullRequestDetail>(); var allPullRequestsErrors = new List <PullRequestJobDetails.ErrorDetail>(); var allPullRequestsTimeLogs = new List <PullRequestJobDetails.TimeEntry>(); foreach (var repository in membersAndRepositories) { var startTime = DateTime.UtcNow; try { _logger.LogInformation("Fetching pull requests for {Repository}", repository.Name); var result = await _mediator.Request <FetchPullRequestsForRepository, FetchPullRequestsResult>(new FetchPullRequestsForRepository(repository)); allPullRequestsDetails.AddRange(result.Details); allPullRequests.AddRange(result.PullRequests); allPullRequestsErrors.AddRange(result.Errors); allPullRequestsTimeLogs.AddRange(result.TimeLogs); _logger.LogInformation("Found {Count} pull requests for {Repository}", result.PullRequests.Count(), repository.Name); } catch (Exception ex) { _logger.LogError(ex, "Error fetching pull requests for {Repository}", repository.Name); allPullRequestsErrors.Add(new PullRequestJobDetails.ErrorDetail { Repository = repository.Name, Error = ex.Message }); } allPullRequestsTimeLogs.Add(new PullRequestJobDetails.RepositoryTiemEntry { Repository = repository.Name, Start = startTime, End = DateTime.UtcNow }); } await _mediator.Execute(new SavePullRequests(allPullRequests)); await _mediator.Execute(new UpdateLastPullRequestFetchDate(allPullRequests)); details.PullRequests = allPullRequestsDetails; details.Errors = allPullRequestsErrors; details.TimeLogs = allPullRequestsTimeLogs; return(details); }