public async Task <IActionResult> Get([FromQuery] LoverLogParameters parameters) { string userId = this.GetUserId(); PaginatedList <LoverLog> logs = await _repository.GetLoverLogsAsync(userId, parameters); IQueryable <LoverLog> sortedLogs = logs.AsQueryable() .ApplySort( parameters.OrderBy, _propertyMappingContainer.Resolve <LoverLogResource, LoverLog>()); IEnumerable <LoverLogResource> loverLogResources = _mapper.Map <IEnumerable <LoverLogResource> >(sortedLogs) .Select(x => { Parallel.ForEach(x.LoverPhotos, photo => { photo.Url = Url.LinkRelative("GetPhoto", new { id = photo.Id }); }); return(x); }); IEnumerable <ExpandoObject> shapedLoverLogResources = loverLogResources.ToDynamicObject(parameters.Fields) .AddLinks(this, parameters.Fields, "GetLoverLog", "DeleteLoverLog", "PartiallyUpdateLoverLog"); var result = new { value = shapedLoverLogResources, links = this.CreatePaginationLinks("GetLoverLogs", parameters, logs.HasPrevious, logs.HasNext) }; this.AddPaginationHeaderToResponse(logs); return(Ok(result)); }
public async Task <PaginatedList <LoverLog> > GetLoverLogsAsync(string userId, LoverLogParameters parameters) { if (string.IsNullOrEmpty(userId)) { throw new ArgumentNullException(nameof(userId)); } IQueryable <LoverLog> query = _dbContext.LoverLogs.Include(x => x.LoverPhotos).Where( x => x.Lover.LoverCloudUsers.Any(user => user.Id == userId)); IQueryable <LoverLog> result = query .Skip(parameters.PageSize * (parameters.PageIndex - 1)) .Take(parameters.PageSize); return(new PaginatedList <LoverLog>( parameters.PageIndex, parameters.PageSize, await query.CountAsync(), await result.ToListAsync())); }