Example #1
0
        /// <summary>
        /// Returns the found relations.
        /// </summary>
        public async Task <RelationsListVM> GetRelationsAsync(RelationsListRequestVM request)
        {
            const int PageSize = 50;

            request = NormalizeListRequest(request);

            var result = new RelationsListVM {
                Request = request
            };

            await FillAdditionalDataAsync(request, result);

            var query = _db.Relations.Where(x => x.IsComplementary == false && x.IsDeleted == false);

            if (request.EntityId != null)
            {
                query = query.Where(x => x.DestinationId == request.EntityId ||
                                    x.SourceId == request.EntityId ||
                                    x.EventId == request.EntityId);
            }

            if (!string.IsNullOrEmpty(request.SearchQuery))
            {
                var req = request.SearchQuery.ToLower();
                query = query.Where(x => x.Destination.Title.ToLower().Contains(req) ||
                                    x.Source.Title.ToLower().Contains(req) ||
                                    x.Event.Title.ToLower().Contains(req));
            }

            if (request.Types?.Length > 0)
            {
                query = query.Where(x => request.Types.Contains(x.Type));
            }

            var totalCount = await query.CountAsync();

            result.PageCount = (int)Math.Ceiling((double)totalCount / PageSize);

            var dir = request.OrderDescending ?? false;

            if (request.OrderBy == nameof(RelationTitleVM.Destination))
            {
                query = query.OrderBy(x => x.Destination.Title, dir);
            }
            else if (request.OrderBy == nameof(RelationTitleVM.Source))
            {
                query = query.OrderBy(x => x.Source.Title, dir);
            }
            else
            {
                query = query.OrderBy(x => x.Type, dir);
            }

            result.Items = await query.ProjectTo <RelationTitleVM>(_mapper.ConfigurationProvider)
                           .Skip(PageSize * request.Page)
                           .Take(PageSize)
                           .ToListAsync();

            return(result);
        }
Example #2
0
        /// <summary>
        /// Completes and\or corrects the search request.
        /// </summary>
        private RelationsListRequestVM NormalizeListRequest(RelationsListRequestVM vm)
        {
            if (vm == null)
            {
                vm = new RelationsListRequestVM();
            }

            var orderableFields = new[] { nameof(RelationTitleVM.Destination), nameof(RelationTitleVM.Source), nameof(RelationTitleVM.Type) };

            if (!orderableFields.Contains(vm.OrderBy))
            {
                vm.OrderBy = orderableFields[0];
            }

            if (vm.Page < 0)
            {
                vm.Page = 0;
            }

            if (vm.OrderDescending == null)
            {
                vm.OrderDescending = false;
            }

            return(vm);
        }
Example #3
0
        public async Task <ActionResult> Index(RelationsListRequestVM request)
        {
            ViewBag.Data = await GetDataAsync(request);

            var rels = await _rels.GetRelationsAsync(request);

            return(View(rels));
        }
Example #4
0
        /// <summary>
        /// Loads extra data for the filter.
        /// </summary>
        private async Task FillAdditionalDataAsync(RelationsListRequestVM request, RelationsListVM data)
        {
            if (request.EntityId != null)
            {
                var title = await _db.Pages
                            .Where(x => x.Id == request.EntityId)
                            .Select(x => x.Title)
                            .FirstOrDefaultAsync();

                if (title != null)
                {
                    data.EntityTitle = title;
                }
                else
                {
                    request.EntityId = null;
                }
            }
        }
Example #5
0
        /// <summary>
        /// Loads extra data for the filter.
        /// </summary>
        private async Task <RelationsListDataVM> GetDataAsync(RelationsListRequestVM request)
        {
            var data = new RelationsListDataVM();

            if (request.EntityId != null)
            {
                var title = await _db.Pages
                            .Where(x => x.Id == request.EntityId)
                            .Select(x => x.Title)
                            .FirstOrDefaultAsync();

                if (title != null)
                {
                    data.EntityTitle = title;
                }
                else
                {
                    request.EntityId = null;
                }
            }

            return(data);
        }