public async Task <NotificationMessageSearchResult> SearchMessageAsync(NotificationMessageSearchCriteria criteria) { var result = new NotificationMessageSearchResult(); using (var repository = _repositoryFactory()) { //Optimize performance and CPU usage repository.DisableChangesTracking(); result.Results = new List <NotificationMessage>(); var query = BuildQuery(repository, criteria); var sortInfos = BuildSortExpression(criteria); result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var messageIds = await query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id) .Select(x => x.Id) .Skip(criteria.Skip).Take(criteria.Take) .ToArrayAsync(); var unorderedResults = await _messageService.GetNotificationsMessageByIds(messageIds); result.Results = unorderedResults.OrderBy(x => Array.IndexOf(messageIds, x.Id)).ToList(); } } return(result); }
public async Task <NotificationMessageSearchResult> SearchMessageAsync(NotificationMessageSearchCriteria criteria) { var result = new NotificationMessageSearchResult(); using (var repository = _repositoryFactory()) { result.Results = new List <NotificationMessage>(); var query = repository.NotifcationMessages; if (!criteria.ObjectIds.IsNullOrEmpty()) { query = query.Where(n => criteria.ObjectIds.Contains(n.TenantId)); } if (!string.IsNullOrEmpty(criteria.ObjectType)) { query = query.Where(n => n.TenantType == criteria.ObjectType); } if (!criteria.ObjectTypes.IsNullOrEmpty()) { query = query.Where(n => criteria.ObjectTypes.Contains(n.TenantType)); } result.TotalCount = await query.CountAsync(); if (criteria.Take > 0) { var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = "CreatedDate", SortDirection = SortDirection.Descending } }; } query = query.OrderBySortInfos(sortInfos).ThenBy(x => x.Id); result.Results = query.Skip(criteria.Skip) .Take(criteria.Take) .ToArray() .Select(nm => nm.ToModel(AbstractTypeFactory <NotificationMessage> .TryCreateInstance())) .ToList(); } } return(result); }
protected virtual IList <SortInfo> BuildSortExpression(NotificationMessageSearchCriteria criteria) { var sortInfos = criteria.SortInfos; if (sortInfos.IsNullOrEmpty()) { sortInfos = new[] { new SortInfo { SortColumn = nameof(NotificationMessageEntity.CreatedDate), SortDirection = SortDirection.Descending } }; } return(sortInfos); }
protected virtual IQueryable <NotificationMessageEntity> BuildQuery(INotificationRepository repository, NotificationMessageSearchCriteria criteria) { var query = repository.NotifcationMessages; if (!criteria.ObjectIds.IsNullOrEmpty()) { query = query.Where(n => criteria.ObjectIds.Contains(n.TenantId)); } if (!criteria.ObjectTypes.IsNullOrEmpty()) { query = query.Where(n => criteria.ObjectTypes.Contains(n.TenantType)); } if (!string.IsNullOrEmpty(criteria.NotificationType)) { query = query.Where(x => x.NotificationType == criteria.NotificationType); } if (!string.IsNullOrEmpty(criteria.Status)) { query = query.Where(x => x.Status == criteria.Status); } return(query); }
public async Task <ActionResult <NotificationMessageSearchResult> > GetNotificationJournal([FromBody] NotificationMessageSearchCriteria criteria) { var result = await _notificationMessageSearchService.SearchMessageAsync(criteria); return(Ok(result)); }