public Task <HttpResponseMessage> LivroPorTitulo([FromUri] LivrosDTO filtros, int?pagina)
        {
            HttpResponseMessage response = null;

            if (filtros.Titulo == null || filtros.UsuarioId == Guid.Empty)
            {
                const string message = "Por favor, informe o titulo do livro e o identificador do usuário!";
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, message));
            }

            var livro = _livrosApplication.BuscarPorTitulo(filtros, PagingHelper.GetOffset(pagina),
                                                           PagingHelper.GetTake());

            //var livro = _livrosApplication.BuscarPorTitulo(filtros, skip, take);

            if (!livro.Dto.Any())
            {
                const string message =
                    "Desculpe, não foi possível encontrar nenhum resultado para os filtros utilizados.";
                response = Request.CreateResponse(HttpStatusCode.NoContent, message);
            }
            else
            {
                response = Request.CreateResponse(HttpStatusCode.OK, livro);
            }

            var tarefa = new TaskCompletionSource <HttpResponseMessage>();

            tarefa.SetResult(response);
            return(tarefa.Task);
        }
        public Task <HttpResponseMessage> CadastrarLivro(LivrosDTO livros)
        {
            HttpResponseMessage response = null;

            if (!ModelState.IsValid || livros == null)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }


            var livroAdicionado = _livrosApplication.Add(livros);

            if (!livroAdicionado.ValidationResult.IsValid)
            {
                foreach (var item in livroAdicionado.ValidationResult.Erros)
                {
                    ModelState.AddModelError(string.Empty, item.Message);
                }

                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }

            response = Request.CreateResponse(HttpStatusCode.Created, new { message = "Leitura do livro foi criada com sucesso!" });
            //var newUriRecurso = Url.Link("GetBookById", new { id = livroAdicionado.LivroId, controller = "livros" });
            //response.Headers.Location = new Uri(newUriRecurso);

            var tarefa = new TaskCompletionSource <HttpResponseMessage>();

            tarefa.SetResult(response);
            return(tarefa.Task);
        }
        /// <summary>
        /// Método responsável por buscar os livros de acordo com uma categoria
        /// </summary>
        /// <param name="livrosDto">DTO da entidade Livro</param>
        /// <param name="skip">Utilizado para paginação de registros</param>
        /// <param name="take">Utilizado para paginação de registros</param>
        /// <returns>Lista de livros filtrados</returns>
        public FiltrosPesquisaDTO <LivrosDTO> LivrosPorCategoria(LivrosDTO livrosDto, int skip = 0, int take = 10)
        {
            var total = 0;

            var livrosDomain = Mapper.Map <LivrosDTO, Livros>(livrosDto);
            var listaLivros  = _livrosService.LivrosPorCategoria(livrosDomain, out total, skip, take);

            return(ConverterListaDominioToDto(listaLivros, total));
        }
        /// <summary>
        /// Método responsável por adicionar um livro ao domínio
        /// </summary>
        /// <param name="livrosDto">Livro a ser adicionado</param>
        public LivrosDTO Add(LivrosDTO livrosDto)
        {
            var livros = Mapper.Map <LivrosDTO, Livros>(livrosDto);

            var livroDomain = _livrosService.Add(livros);
            var livroDto    = Mapper.Map(livroDomain, livrosDto);

            return(livroDto);
        }
        public Task <HttpResponseMessage> ObterTodosLivros([FromUri] LivrosDTO filtros, int?pagina)
        {
            HttpResponseMessage response = null;

            var livros = _livrosApplication.GetAll(filtros, PagingHelper.GetOffset(pagina),
                                                   PagingHelper.GetTake());

            if (!livros.Dto.Any())
            {
                response = Request.CreateResponse(HttpStatusCode.NoContent, new { message = "Desculpe, não foi possível encontrar nenhum resultado para os filtros utilizados." });
            }
            else
            {
                response = Request.CreateResponse(HttpStatusCode.OK, livros);
            }

            var tarefa = new TaskCompletionSource <HttpResponseMessage>();

            tarefa.SetResult(response);
            return(tarefa.Task);
        }