SharebookBR / sharebook-backend

Projeto backend de código livre para o app Sharebook.
117 stars 75 forks source link

ChooseDate null indevidamente #196

Closed raffacabofrio closed 5 years ago

raffacabofrio commented 5 years ago

Ao editar um livro ( PUT ) o campo ChooseDate está ficando null indevidamente.

O ideal eh que campos omitidos NÃO sejam convertidos em null.

Passos para reproduzir esse erro, usando o front de dev: 1 - doe um livro. ( nasce com ChooseDate null, CORRETO ) 2 - aprove o livro ( ChooseDate ganha um valor, CORRETO ) 3 - edite apenas a sinopse do livro ( ChooseDate fica null, ERRADO )

Ambiente de DEV: http://dev.sharebook.com.br/

Usuário adm em DEV: vagner@sharebook.com 123456

arielmoraes commented 5 years ago

Algumas coisas que podem estar acontecendo: o endpoint de editar está sendo chamado, porém o mesmo espera o objeto inteiro de um livro ou outro endpoint está sendo chamado (apenas para editar a sinopse) e está sendo passada uma ViewModel de edição completa.

Para resolver a melhor solução é criar um endpoint com apenas a edição da sinopse, caso não exista, e atualizar apenas a propriedade desejada e não mapear o objeto inteiro (utilizando automapper e afins)

raffacabofrio commented 5 years ago

@marcios @bhenn se liga só. O que vcs acham?

marcios commented 5 years ago

vou analisar;

marcios commented 5 years ago

@marcios @bhenn se liga só. O que vcs acham?

Bom o que pode ser feito é o seguinte. Na repository de livro (BookRepository), no "metodo public override async Task UpdateAsync(Book entity)" existe algumas validações que visam não atualizar determinadas propriedades. acredito que da pra seguir na mesma linha adicionando a seguinte validação.

Se o livro está aprovado e possui a chosse date valido (ou seja, não apenas verificando se possui data e sim se a data da choose date ainda não chegou). resumindo, se choosedate for menor que data atual é inválido.

Se essas condições forem verdadeiras, livro ativo e chooseDate > que data atual, não permtir a atualização do campo chooseDate. ao meu ver, isso seria uma 'validação' mais adequada doque somente olhar se chooseDate não está nulo.

arielmoraes commented 5 years ago

Porque vocês não criam outro método no repositório (AlterarSinopse)? O repositório não precisa ser só de CRUD, com isso a validação sugerida pelo @marcios pode ficar fora da parte de acesso ao dados.

arielmoraes commented 5 years ago

Outra solução seria manter o método de update, porém vocês trazem o objeto do banco e só atualizam a propriedade desejada.

marcios commented 5 years ago

Porque vocês não criam outro método no repositório (AlterarSinopse)? O repositório não precisa ser só de CRUD, com isso a validação sugerida pelo @marcios pode ficar fora da parte de acesso ao dados.

Criar um endpoint para somente atlerar sinpse é tranquilo no backend, mas isso exigirá uma mudança no fronteend tambem. a tela de editar livro possui apenas o botão salvar que é geral salva todas as informações do livro. teria que ter um botão apenas para alterar a sinopse. na minha opnião, teriamos 2 'problemas' agora pra resolver que é atualizar o front e o backend.

marcios commented 5 years ago

Outra solução seria manter o método de update, porém vocês trazem o objeto do banco e só atualizam a propriedade desejada.

isso, minha sugestão envolve isso. no update ja é omitido algumas propriedades da atualização

marcios commented 5 years ago

Bom eu fiz uma atualização local e fiz alguns testes acredito que ficou legal fiz como @arielmoraes sugeriu apenas na atualização do livro faço uma busca na base e atualizo as propriedades que vem da tela. vou enviar o PR para validação de todos.

raffacabofrio commented 5 years ago

Obrigado a todos. Cês são foda! Fechando aqui.

@arielmoraes @marcios