/// <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); }
/// <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); }
public async Task <ActionResult> Index(RelationsListRequestVM request) { ViewBag.Data = await GetDataAsync(request); var rels = await _rels.GetRelationsAsync(request); return(View(rels)); }
/// <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; } } }
/// <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); }