public async Task <IActionResult> Get([FromQuery] LoverPhotoParameters parameters) { PaginatedList <LoverPhoto> photos = await _repository.GetLoverPhotosAsync(this.GetUserId(), parameters); IQueryable <LoverPhoto> sortedPhotos = photos.AsQueryable() .ApplySort( parameters.OrderBy, _propertyMappingContainer.Resolve <LoverPhotoResource, LoverPhoto>()); IEnumerable <LoverPhotoResource> loverPhotoResources = _mapper.Map <IEnumerable <LoverPhotoResource> >(sortedPhotos); IEnumerable <ExpandoObject> shapedLoverPhotoResources = loverPhotoResources.ToDynamicObject(parameters.Fields) .AddLinks(this, parameters.Fields, "photo", "GetPhoto", "DeleteLoverPhoto", "PartiallyUpdateLoverPhoto"); this.AddPaginationHeaderToResponse(photos); var result = new { value = shapedLoverPhotoResources, links = this.CreatePaginationLinks( "GetLoverPhotoResources", parameters, photos.HasPrevious, photos.HasNext) }; return(Ok(result)); }
public async Task <PaginatedList <LoverPhoto> > GetLoverPhotosAsync(string userId, LoverPhotoParameters parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } if (string.IsNullOrEmpty(userId)) { throw new ArgumentException($"Argument {userId} with type string can not be null or empty"); } var loverPhotos = _dbContext.LoverPhotos .Include(x => x.Lover) .ThenInclude(x => x.LoverCloudUsers) .Where( x => x.Lover.LoverCloudUsers.Any(y => y.Id == userId) && (string.IsNullOrEmpty(parameters.Name) ? true : x.Name.Equals(parameters.Name)) && (string.IsNullOrEmpty(parameters.AlbumId) ? true : x.AlbumId == parameters.AlbumId)); var loverPhotoList = await loverPhotos .Skip(parameters.PageSize *(parameters.PageIndex - 1)) .Take(parameters.PageSize) .ToListAsync(); return(new PaginatedList <LoverPhoto>( parameters.PageIndex, parameters.PageSize, await loverPhotos.CountAsync(), loverPhotoList)); }