示例#1
0
        public async Task <Result <IReadOnlyList <LivroModel> > > GetLivrosAsync(LivroFilterQuery filter = null)
        {
            var spec = new LivroFilterSpecification(filter.EditoraId,
                                                    filter.AutorId, filter.Titulo, filter.Idioma);
            var livros = (await _repositorio.ListAsync(spec)).ToList();

            return(Result <IReadOnlyList <LivroModel> > .Success(
                       _mapper.Map <IReadOnlyList <LivroModel> >(livros)));
        }
        public override async Task ListAll(LivroSearch request, IServerStreamWriter <LivrosResponse> responseStream, ServerCallContext context)
        {
            var  livrosResponse = new LivrosResponse();
            Guid?editoraId, autorId;

            if (string.IsNullOrEmpty(request.EditoraId))
            {
                editoraId = null;
            }
            else
            {
                editoraId = Guid.Parse(request.EditoraId);
            }

            if (string.IsNullOrEmpty(request.AutorId))
            {
                autorId = null;
            }
            else
            {
                autorId = Guid.Parse(request.AutorId);
            }

            var searchQuery = new LivroFilterQuery
            {
                Titulo    = request.Titulo,
                Idioma    = request.Idioma,
                EditoraId = editoraId,
                AutorId   = autorId
            };

            var result = await _servico.GetLivrosAsync(filter : searchQuery);

            livrosResponse.Code = (int)context.Status.StatusCode;
            livrosResponse.Errors.AddRange(result.Errors);
            livrosResponse.Message = result.Errors.Any() ?
                                     "Erro ao retornar lista de livros" :
                                     "Livros retornados com sucesso";
            livrosResponse.Data.AddRange(
                result.Value.Select(x => new LivroModel
            {
                Id             = x.Id.ToString(),
                Titulo         = x.Titulo,
                Descricao      = x.Descricao,
                Valor          = Convert.ToDouble(x.Valor),
                Isbn10         = x.ISBN_10,
                Edicao         = x.Edicao,
                Idioma         = x.Idioma,
                DataPublicacao = x.DataPublicacao.ToShortDateString(),
                NumeroPaginas  = x.NumeroPaginas,
                EditoraId      = x.EditoraId.ToString(),
                AutorId        = x.AutorId.ToString()
            }));

            await responseStream.WriteAsync(livrosResponse);
        }