Skip to content

025. POST Create do User

Filipe Deschamps edited this page Jan 18, 2022 · 1 revision

28/12/21

Não usar um ORM está sendo um desafio muito massa e trabalhoso. Não há nada complexo no sentido de ser "profundamente complexo", e acaba sendo algo "trabalhosamente complexo" porque somente implementando tudo de forma manual é que dá para perceber quantas coisas de graça você ganha utilizando um ORM, ou até outras abstrações mais altas.

De qualquer forma, está sendo fantástico e tudo começou com o PR #133 do rodrigoKulb e que foi continuado mim no PR #149 e que acabou se tornando um PR que mexia em vários outros pontos da aplicação, mas que o foco principal acabou se tornando o Create da entidade User.

E os principais pontos para implementar essa parte do zero não são novidades, a gente discutiu em issues passadas, onde em destaque você tem:

  • Custom Errors: como o ValidationError e DatabaseError para seguir corretamente com o fluxo da aplicação dependendo do tipo de erro que acontecer.
  • Validação do Schema: os campos e suas regras, como comprimento máximo e mínimo, por exemplo.
  • Regras de Negócio: não ter dois username iguais, por exemplo, que pode ser implementado como uma constraint no banco, na camada da aplicação, ou nos dois, como foi no nosso caso.
  • Interface REST: no caso da nossa API, a criação está sendo feito pelo método POST como esperado.
  • Testes automatizados: essa parte é a que deu mais trabalho, pois eu tentei testar todas as combinações possíveis para cada parâmetro, por exemplo tem 7 testes de validação somente em cima do username. Mas novamente, não é nada complexo, é só trabalhoso. O tradeoff é a carga de código por conta de termos apenas teste de integração e a existência de qualquer código é também a existência de bugs e maior manutenção. Mas vamos ver no que vai dar.

Por fim, no PR #149 a ideia era fazer todo o CRUD do User, mas agora no final de Dezembro eu estou conseguindo poucos momentos para programar e decidi agora por fazer o merge da parte do Create, até porque o rodrigoKulb já tinha "aberto a trilha" para as outras responsabilidades e agora é "só" continuar com o trabalho. E eu coloquei o "só" entre aspas, porque ainda no Create tem coisas importantes a se fazer, como o hash da senha, mas que podemos fazer mais para frente quando entrarmos nas implementações sobre Autenticação.

Fora isso, naturalmente as implementações tem muita margem para refatoração, como talvez separar a validação dos campos do User em outro lugar.