public async Task <IActionResult> GetByIdProviderNewsServiceQuery(int id)
        {
            var model = await _getByIdProviderNewsServiceQuery.ExecuteAsync(id);

            return(new OkObjectResult(model));
        }
コード例 #2
0
        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;
            }
        }