public static SuggestedJobsEmail Create(ICommunicationUser to, IEnumerable <JobAd> jobAds, int totalMatches) { var emailItems = CreateEmailItems(jobAds); var email = new SuggestedJobsEmail(to, totalMatches, emailItems); return(email); }
public void Run(Guid userId, DateTime lastRunTime) { const string method = "Run"; // The user has to be active to receive this email. if (!_userAccountsQuery.IsActive(userId)) { #region Log Logger.Raise(Event.Trace, method, "The user is not active and therefore won't get any suggested jobs.", Event.Arg("userId", userId)); #endregion return; } var member = _membersQuery.GetMember(userId); var execution = _jobAdSearchCommand.SearchSuggested(member, DateTime.Now - lastRunTime, new Range(0, MaxResults)); if (execution.Results.JobAdIds.Count == 0) { #region Log Logger.Raise(Event.Trace, method, "No new suggested jobs were found.", Event.Arg("userId", userId)); #endregion return; } var jobAdIds = execution.Results.JobAdIds.Take(MaxResults).ToList(); var jobAds = _jobAdsQuery.GetJobAds <JobAd>(jobAdIds).ToDictionary(j => j.Id, j => j); var emailJobAds = from i in jobAdIds where jobAds.ContainsKey(i) select jobAds[i]; var to = _membersQuery.GetMember(userId); var email = SuggestedJobsEmail.Create(to, emailJobAds, execution.Results.JobAdIds.Count); var ok = _emailsCommand.TrySend(email); #region Log if (ok) { Logger.Raise(Event.Trace, method, "SuggestedJobsEmail sent.", Event.Arg("userId", userId)); } else { Logger.Raise(Event.Warning, method, "Unable to send SuggestedJobsEmail.", Event.Arg("userId", userId)); } #endregion }