-
Notifications
You must be signed in to change notification settings - Fork 416
025. POST Create do User
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
eDatabaseError
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.