public void Editar_livro_com_todos_dados()
        {
            var context = new Data.Context();
            var id      = context.Livros.Select(x => x.Id).FirstOrDefault();

            var formDto = new LivroFormDto
            {
                AnoDePublicacao     = 2010,
                Autor               = "Christian Nagel editado",
                Editora             = "Wrox editado",
                Isbn                = "1119449278 editado",
                AutoresSecundarios  = "outro autor editado",
                GeneroId            = context.Generos.Select(x => x.Id).FirstOrDefault(),
                NumeroDaEdicao      = 99,
                NumeroDePaginas     = 999,
                QuantidadeEmEstoque = 10,
                Serie               = "20 editado",
                SubTitulo           = ".NetCore editado",
                Titulo              = "Professional C# 7 editado",

                Id = id
            };
            var services = new LivrosServices(context, new GeneroServices(context), new LivroBuilder());
            var dto      = services.Edit(formDto);

            Assert.IsTrue(dto.IsValid);
        }
        private Livro EditarLivro(LivroFormDto formDto)
        {
            var livro = GetById(formDto.Id);

            if (livro == null)
            {
                return(null);
            }
            var genero = _generoServices.GetById(formDto.GeneroId);

            livro.SetAnoDePublicacao(formDto.AnoDePublicacao);
            livro.SetAutor(formDto.Autor);
            livro.SetAutoresSecundarios(formDto.AutoresSecundarios);
            livro.SetEditora(formDto.Editora);
            livro.SetGenero(genero);
            livro.SetIsbn(formDto.Isbn);
            livro.SetNumeroDaEdicao(formDto.NumeroDaEdicao);
            livro.SetNumeroDePaginas(formDto.NumeroDePaginas);
            livro.SetQuantidadeEmEstoque(formDto.QuantidadeEmEstoque);
            livro.SetSerie(formDto.Serie);
            livro.SetSubTitulo(formDto.SubTitulo);
            livro.SetTitulo(formDto.Titulo);
            livro.SetDataDeEdicao(DateTime.Now);

            return(livro);
        }
        public ActionResult Novo(LivroFormViewModel formViewModel)
        {
            var dto = new LivroFormDto
            {
                AnoDePublicacao    = formViewModel.AnoDePublicacao,
                Autor              = formViewModel.Autor,
                AutoresSecundarios = formViewModel.AutoresSecundarios,
                Editora            = formViewModel.Editora,
                GeneroId           = formViewModel.GeneroId,
                Isbn                = formViewModel.Isbn,
                NumeroDaEdicao      = formViewModel.NumeroDaEdicao,
                NumeroDePaginas     = formViewModel.NumeroDePaginas,
                QuantidadeEmEstoque = formViewModel.QuantidadeEmEstoque,
                Serie               = formViewModel.Serie,
                SubTitulo           = formViewModel.SubTitulo,
                Titulo              = formViewModel.Titulo,
            };

            var formDto = _livroServices.Save(dto);

            if (!formDto.IsValid)
            {
                AdicionarErrosDoValidatorNoModelState(formDto);
                var viewModel = SetFormViewModel(MontarViewModel(formDto));
                return(View("Novo", viewModel));
            }
            return(RedirectToAction("Index"));
        }
        public LivroFormDto Edit(LivroFormDto formDto)
        {
            if (!Validar(formDto))
            {
                return(formDto);
            }

            var livro = EditarLivro(formDto);

            if (!livro.IsValid)
            {
                formDto.AddErro("", string.Join(", ", livro.Erros));
                return(formDto);
            }

            _context.SaveChanges();
            return(formDto);
        }
        public void Salvar_livro_com_dados_minimos()
        {
            var context = new Data.Context();
            var id      = context.Livros.Select(x => x.Id).FirstOrDefault();

            var formDto = new LivroFormDto
            {
                Autor    = "Christian Nagel",
                Editora  = "Wrox",
                GeneroId = context.Generos.Select(x => x.Id).FirstOrDefault(),
                Titulo   = "Professional C# 7",

                Id = id
            };
            var services = new LivrosServices(context, new GeneroServices(context), new LivroBuilder());
            var dto      = services.Edit(formDto);

            Assert.IsTrue(dto.IsValid);
        }
        public void Salvar_livro_com_ano_de_publicacao_igual_o_atual()
        {
            var context = new Data.Context();
            var id      = context.Livros.Select(x => x.Id).FirstOrDefault();

            var formDto = new LivroFormDto
            {
                Autor           = "Christian Nagel",
                Editora         = "Wrox",
                GeneroId        = context.Generos.Select(x => x.Id).FirstOrDefault(),
                Titulo          = "Professional C# 7",
                AnoDePublicacao = DateTime.Now.Year,
                Id = id
            };
            var services = new LivrosServices(context, new GeneroServices(context), new LivroBuilder());
            var dto      = services.Edit(formDto);

            Assert.IsTrue(dto.IsValid);
        }
        private Livro CriarLivro(LivroFormDto formDto)
        {
            var genero = _generoServices.GetById(formDto.GeneroId);

            return(_livroBuilder.
                   WithId(Guid.NewGuid()).
                   WithAnoDePublicacao(formDto.AnoDePublicacao).
                   WithAutor(formDto.Autor).
                   WithAutoresSecundarios(formDto.AutoresSecundarios).
                   WithEditora(formDto.Editora).
                   WithGenero(genero).
                   WithIsbn(formDto.Isbn).
                   WithNumeroDaEdicao(formDto.NumeroDaEdicao).
                   WithNumeroDePaginas(formDto.NumeroDePaginas).
                   WithQuantidadeEmEstoque(formDto.QuantidadeEmEstoque).
                   WithSerie(formDto.Serie).
                   WithSubTitulo(formDto.SubTitulo).
                   WithTitulo(formDto.Titulo).
                   Build());
        }
 private LivroFormViewModel MontarViewModel(LivroFormDto dto)
 {
     return(new LivroFormViewModel
     {
         Id = dto.Id,
         AnoDePublicacao = dto.AnoDePublicacao,
         Autor = dto.Autor,
         AutoresSecundarios = dto.AutoresSecundarios,
         Editora = dto.Editora,
         GeneroId = dto.GeneroId,
         Isbn = dto.Isbn,
         NumeroDaEdicao = dto.NumeroDaEdicao,
         NumeroDePaginas = dto.NumeroDePaginas,
         QuantidadeEmEstoque = dto.QuantidadeEmEstoque,
         Serie = dto.Serie,
         SubTitulo = dto.SubTitulo,
         Titulo = dto.Titulo,
         Erros = dto.Erros.Select(x => x.Erro).ToList()
     });
 }
        private bool Validar(LivroFormDto formDto)
        {
            if (formDto.AnoDePublicacao.HasValue && formDto.AnoDePublicacao > DateTime.Now.Year)
            {
                formDto.AddErro(nameof(formDto.AnoDePublicacao), "O ano de publicação não pode ser maior que o ano atual.");
            }
            if (string.IsNullOrWhiteSpace(formDto.Titulo))
            {
                formDto.AddErro(nameof(formDto.Titulo), "O título do livro deve ser informado.");
            }
            if (string.IsNullOrWhiteSpace(formDto.Autor))
            {
                formDto.AddErro(nameof(formDto.Autor), "O autor do livro deve ser informado.");
            }
            if (string.IsNullOrWhiteSpace(formDto.Editora))
            {
                formDto.AddErro(nameof(formDto.Editora), "A editora do livro deve ser informada.");
            }

            return(formDto.IsValid);
        }