public IActionResult GetPaginationPhotosByDescription(PaginationPhotosByDescriptionRequestDto paginationPhotosByDescriptionRequestDto)
        {
            try
            {
                var photoToSearch = _photoService.GetPaginationPhotosByDescription(paginationPhotosByDescriptionRequestDto);

                return(Ok(photoToSearch));
            }
            catch (InvalidOperationException invalidOperationException)
            {
                return(NoContent());
            }
            catch (Exception exeption)
            {
                return(new ObjectResult(new
                {
                    Error = exeption.Message
                })
                {
                    StatusCode = StatusCodes.Status500InternalServerError
                });
            }
        }
        public void GetPaginationPhotosByDescription_InvalidDescription_ThrowInvalidOperationException()
        {
            var authServiceMock = new Mock <IAuthService>();
            var dataServiceMock = new Mock <IDataService>();

            var paginationPhotosByDescriptionRequestDto = new PaginationPhotosByDescriptionRequestDto()
            {
                Description = "description", PageNumber = 2, PageSize = 10
            };

            dataServiceMock.Setup(u => u.GetPaginationPhotosByDescription(paginationPhotosByDescriptionRequestDto.Description,
                                                                          (paginationPhotosByDescriptionRequestDto.PageNumber - 1) * paginationPhotosByDescriptionRequestDto.PageSize, paginationPhotosByDescriptionRequestDto.PageSize))
            .Throws(new InvalidOperationException());

            var controller = new PhotosController(dataServiceMock.Object, authServiceMock.Object);

            var result = controller.GetPaginationPhotosByDescription(paginationPhotosByDescriptionRequestDto);

            var statusCode = ((NoContentResult)result).StatusCode;

            Assert.True(statusCode == 204);

            dataServiceMock.VerifyAll();
        }
        /// <summary>
        /// Get collection of pagination photos by their description and the number of all pages.
        /// </summary>
        /// <param name="photoToSearchDto">Object of type <see cref="PaginationPhotosByDescriptionRequestDto"/>.</param>
        /// <returns>Object of type <see cref="PaginationPhotosByDescriptionResponseDto"/>.</returns>
        /// <exception cref="InvalidOperationException">Thrown when haven`t photos with this description.</exception>
        public PaginationPhotosByDescriptionResponseDto GetPaginationPhotosByDescription(PaginationPhotosByDescriptionRequestDto photoToSearchDto)
        {
            try
            {
                var allPhotosWithDescriptionCount = _dataService.GetCountPhotosByDescription(photoToSearchDto.Description);

                int skipNumber = (photoToSearchDto.PageNumber - 1) * photoToSearchDto.PageSize;

                int takeNumber = photoToSearchDto.PageSize;

                var photosFromDb = _dataService.GetPaginationPhotosByDescription(photoToSearchDto.Description, skipNumber, takeNumber);

                if (photosFromDb.Count() == 0)
                {
                    throw new InvalidOperationException();
                }

                var allPagesNumber = _dataService.GetAllPagesNumber(allPhotosWithDescriptionCount, photoToSearchDto.PageSize);

                return(new PaginationPhotosByDescriptionResponseDto {
                    Photo = photosFromDb, AllPagesNumber = allPagesNumber
                });
            }
            catch (InvalidOperationException invalidOperationException)
            {
                throw invalidOperationException;
            }
        }