public async Task <IActionResult> GetByIdProviderNewsServiceQuery(int id) { var model = await _getByIdProviderNewsServiceQuery.ExecuteAsync(id); return(new OkObjectResult(model)); }
public async Task ExecuteAsync() { try { #region GetAll Data var getAllProviderNew = await _providerNewRepository.FindAllAsync(x => x.DateCreated < DateTime.Now && x.DateCreated >= DateTime.Now.AddDays(-1) && x.Status == Model.Enums.Status.Active); var getAllService = await _serviceRepository.FindAllAsync(x => x.DateCreated <DateTime.Now && x.DateCreated> DateTime.Now.AddDays(-1) && x.Status == Model.Enums.Status.Active); var getAllFollowing = await _providerFollowingRepository.FindAllAsync(); var getAllUser = await _userManager.Users.ToListAsync(); var getAllProvider = await _providerRepository.FindAllAsync(x => x.Status == Model.Enums.Status.Active); var getAllProviderService = await _providerServiceRepository.FindAllAsync(); #endregion GetAll Data // User-->UserFollowing-->Provider-->ProviderNews var joinAllInformation = (from user in getAllUser.ToList() join following in getAllFollowing.ToList() on user.Id equals following.UserId join provider in getAllProvider.ToList() on following.ProviderId equals provider.Id join news in getAllProviderNew.ToList() on provider.Id equals news.ProviderId where (following.IsReceiveEmail == true && news.Status == Model.Enums.Status.Active) orderby user.Id select new { IdUser = user.Id, Information = news.Id.ToString() }).ToList(). Union(from user in getAllUser.ToList() join following in getAllFollowing.ToList() on user.Id equals following.UserId join providerService in getAllProviderService.ToList() on following.ProviderId equals providerService.ProviderId join service in getAllService.ToList() on providerService.ServiceId equals service.Id where (following.IsReceiveEmail == true && service.Status == Model.Enums.Status.Active) select new { IdUser = user.Id, Information = service.Id.ToString() }).ToList(); if (joinAllInformation.Count > 0) { var groupInformatin = joinAllInformation.GroupBy(p => p.IdUser).Select(x => new { IdUser = x.Key, Information = x.Select(t => new { t.Information }).ToList() }); //Create List for add. List <RecommendationViewModel> listRecommendService = new List <RecommendationViewModel>(); foreach (var item in groupInformatin) { RecommendationViewModel recommendService = new RecommendationViewModel(); recommendService.EmailUser = _userManager.FindByIdAsync(item.IdUser.ToString()).Result.Email; foreach (var detail in item.Information) { var number = 0; if (Int32.TryParse(detail.Information, out number)) { var resultNews = await _getByIdProviderNewService.ExecuteAsync(number); recommendService.NewsProviderViewModel.Add(resultNews.myModel); } else { var resultProvider = await _getPostServiceByIdQuery.ExecuteAsync(detail.Information); recommendService.PostServiceViewModel.Add(resultProvider); } } listRecommendService.Add(recommendService); } foreach (var item in listRecommendService) { ContentEmail(_configEmail.Value.SendGridKey, "Email recommendation", item.NewsProviderViewModel.ToString() + "</br>" + item.PostServiceViewModel.ToString(), item.EmailUser).Wait(); } } } catch (Exception) { throw; } }