Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }