public async Task <SearchIssueViewModel> SearchSmartIssueAsync(User user, SearchSmartIssueFormModel searchIssueForm)
        {
            try
            {
                var queryable = _context.Issues.Include(c => c.EquipmentIssueSubscriptions).Include(c => c.IssueDetails).Include(c => c.User).Where(c => c.IsActive.HasValue && c.IsActive.Value && c.AnswerCounts > 0).AsQueryable();

                if (!string.IsNullOrEmpty(searchIssueForm.SearchContent))
                {
                    var searchContents = searchIssueForm.SearchContent.Split(" ");
                    foreach (var item in searchContents)
                    {
                        queryable = queryable.Where(q => EF.Functions.Like(q.Title, $"%{item}%"));
                    }
                }

                if (searchIssueForm.FilterType.HasValue)
                {
                    if (searchIssueForm.FilterType.Value == FilterType.AcceptedAnswer)
                    {
                        queryable = queryable.Where(q => q.IssueDetails.Any(c => c.IsCorrectAnswer));
                    }
                    else if (searchIssueForm.FilterType.Value == FilterType.NoAcceptedAnswer)
                    {
                        queryable = queryable.Where(q => q.IssueDetails.All(c => !c.IsCorrectAnswer));
                    }
                    else if (searchIssueForm.FilterType.Value == FilterType.NoAnswers)
                    {
                        queryable = queryable.Where(q => q.AnswerCounts > 1);
                    }
                }

                if (searchIssueForm.SortType.HasValue)
                {
                    if (searchIssueForm.SortType.Value == SortType.Newest)
                    {
                        queryable = queryable.OrderByDescending(q => q.CreationDate);
                    }
                    else if (searchIssueForm.SortType.Value == SortType.MostLikes)
                    {
                        queryable = queryable.OrderByDescending(q => q.IssueDetails.Sum(x => x.Likes));
                    }
                    else if (searchIssueForm.SortType.Value == SortType.RecentActivity)
                    {
                        queryable = queryable.OrderByDescending(q => q.IssueDetails.OrderByDescending(c => c.LastUpdateDate));
                    }
                }
                if (!user.IsAdmin())
                {
                    var userEqu = await _context.EquipmentUserSubscriptions.Where(c => c.UserId == user.Id).Select(c => c.EquipmentId).ToListAsync();

                    queryable = queryable.Where(c => c.EquipmentIssueSubscriptions.Any(x => userEqu.Contains(x.EquipmentId)));
                }
                if (searchIssueForm.EquipmentIds.Count > 0)
                {
                    queryable = queryable.Where(c => c.EquipmentIssueSubscriptions.Any(x => searchIssueForm.EquipmentIds.Contains(x.EquipmentId)));
                }

                var response = await queryable.Skip((searchIssueForm.PageIndex - 1) *searchIssueForm.PageSize).Take(searchIssueForm.PageSize).ToListAsync();

                var count = await queryable.CountAsync();

                var searchViewModel = new SearchIssueViewModel();

                searchViewModel.searchIssueViewModel = response.Select(resp => new IssueViewModel()
                {
                    Id           = resp.Id,
                    AnswerCount  = resp.AnswerCounts,
                    CreationDate = resp.CreationDate,
                    Description  = resp.Description,
                    Equipments   = resp.EquipmentIssueSubscriptions.Select(x => new EquipmentViewModel()
                    {
                        Description   = x.Equipment.Description,
                        EquipmentName = x.Equipment.EquipmentName,
                        Id            = x.EquipmentId
                    }).ToList(),
                    IsActive       = resp.IsActive,
                    IssueType      = resp.IssueType,
                    LastUpdateDate = resp.LastUpdateDate,
                    Title          = resp.Title,
                    SumLikes       = resp.IssueDetails.Sum(c => c.Likes),
                    UserId         = resp.UserId,
                    UserName       = resp.User.Username,
                    FileId         = resp.FileId
                }).ToList();
                searchViewModel.PageIndex  = searchIssueForm.PageIndex;
                searchViewModel.PageSize   = searchIssueForm.PageSize;
                searchViewModel.TotalCount = count;
                return(searchViewModel);
            }
            catch (Exception ex)
            {
                throw new ExperienceManagementGlobalException(IssueServiceErrors.SearchIssuesError, ex);
            }
        }
        public async Task <SearchIssueViewModel> GetIssuesForUserAsync(SearchIssueFormModel searchIssueForm)
        {
            try
            {
                var queryable = _context.Issues.Include(c => c.EquipmentIssueSubscriptions).Include(c => c.User).AsQueryable();

                if (!string.IsNullOrEmpty(searchIssueForm.Title))
                {
                    queryable = queryable.Where(q => q.Title.Contains(searchIssueForm.Title));
                }

                if (searchIssueForm.IssueType.HasValue)
                {
                    queryable = queryable.Where(q => q.IssueType == searchIssueForm.IssueType);
                }

                if (searchIssueForm.IsActive.HasValue)
                {
                    queryable = queryable.Where(q => q.IsActive == searchIssueForm.IsActive);
                }
                if (searchIssueForm.UserId.HasValue)
                {
                    queryable = queryable.Where(q => q.UserId == searchIssueForm.UserId);
                }
                if (searchIssueForm.EquipmentIds.Count > 0)
                {
                    //var eqIssueSubs = _context.EquipmentIssueSubscriptions.Where(c => searchIssueForm.EquipmentIds.Contains(c.EquipmentId)).Select(c=>c.IssueId).ToList();
                    queryable = queryable.Where(c => c.EquipmentIssueSubscriptions.Any(x => searchIssueForm.EquipmentIds.Contains(x.EquipmentId)));
                }
                if (searchIssueForm.SortModel != null)
                {
                    switch (searchIssueForm.SortModel.Col + "|" + searchIssueForm.SortModel.Sort)
                    {
                    case "creationdate|asc":
                        queryable = queryable.OrderBy(x => x.CreationDate);
                        break;

                    case "creationdate|desc":
                        queryable = queryable.OrderByDescending(x => x.CreationDate);
                        break;

                    default:
                        queryable = queryable.OrderBy(x => x.CreationDate);
                        break;
                    }
                }
                else
                {
                    queryable = queryable.OrderBy(x => x.CreationDate);
                }
                var response = await queryable.Skip((searchIssueForm.PageIndex - 1) *searchIssueForm.PageSize).Take(searchIssueForm.PageSize).ToListAsync();

                var count = await queryable.CountAsync();

                var searchViewModel = new SearchIssueViewModel();

                searchViewModel.searchIssueViewModel = response.Select(resp => new IssueViewModel()
                {
                    Id           = resp.Id,
                    AnswerCount  = resp.AnswerCounts,
                    CreationDate = resp.CreationDate,
                    Description  = resp.Description,
                    Equipments   = resp.EquipmentIssueSubscriptions.Select(x => new EquipmentViewModel()
                    {
                        Description   = x.Equipment.Description,
                        EquipmentName = x.Equipment.EquipmentName,
                        Id            = x.EquipmentId
                    }).ToList(),
                    IsActive       = resp.IsActive,
                    SumLikes       = resp.IssueDetails.Sum(c => c.Likes),
                    IssueType      = resp.IssueType,
                    LastUpdateDate = resp.LastUpdateDate,
                    Title          = resp.Title,
                    UserId         = resp.UserId,
                    UserName       = resp.User.Username,
                    FileId         = resp.FileId
                }).ToList();
                searchViewModel.PageIndex  = searchIssueForm.PageIndex;
                searchViewModel.PageSize   = searchIssueForm.PageSize;
                searchViewModel.TotalCount = count;
                return(searchViewModel);
            }
            catch (Exception ex)
            {
                throw new ExperienceManagementGlobalException(IssueServiceErrors.GetIssuesError, ex);
            }
        }