Este é um teste de construção de uma API básica com uma simples integração ao mundo externo. Utilize sua criatividade e habilidade para fazer da melhor forma que você considerar.
• Usar o Node.js 18
• Usar banco de dados relacional MySQL, Postgres ou SQLite
• Versionar tudo em um repositório Git e adicionar um README com instruções de como fazer o deploy do seu projeto
• Usar padrões de projeto, SOLID, TDD e outros paradigmas modernos serão bem vistos
1 - Com base no descritivo de modelo de dados abaixo, crie um banco de dados relacional contendo as tabelas, chaves e definições necessárias:
Modelo Pessoa:
• id - inteiro, autoincremento e chave primária
• nome - texto limitado a 255 caracteres e obrigatório
• nome_mae - texto limitado a 255 caracteres e obrigatório
• nome_pai - texto limitado a 255 caracteres e opcional
• cep - texto limitado a 8 caracteres e obrigatório
• data_nascimento - data e obrigatória
• data_cadastro - data e obrigatória
• data_edicao - data e obrigatória
Modelo Anotação:
• id - inteiro, autoincremento e chave primária
• id_pessoa - inteiro, chave estrangeira é obrigatória
• titulo - texto limitado a 255 caracteres e obrigatório
• descricao - texto limitado a 2000 caracteres e opcional
• data_cadastro - data e obrigatória
• data_edicao - data e obrigatória
2 - Crie os endpoints para operações de CRUD para cada modelo considerando:
• Os campos data_cadastro e data_edicao devem ser preenchidos automaticamente, sem possibilidade do usuário enviar esses dados no payload do endpoint.
• Os campos data_cadastro devem ser preenchidos automaticamente no insert e não podem mais ser alterados.
• Os campos data_edicao devem ser preenchidos automaticamente em cada update.
• O campo CEP, ao ser persistido no insert ou update, deve ser consultado em uma API externa para ser validado. Caso o CEP não seja válido (não localizados dados na API externa), o resultado dos endpoints de Insert ou Update devem apontar um erro no payload no campo cep e não prosseguir com a operação no banco de dados. Utilize esta API para validar os CEPs: https://viacep.com.br/
• No endpoint de Retrieve, o modelo localizado deve ser completado com dados do endereçamento baseado no CEP persistido. Mais uma vez, consulte o CEP na API acima indicada e adicione um atributo no modelo nomeado de 'endereco' que deve conter a resposta da API de CEP consultada.
Sobre o status das respostas dos endpoints:
• 200 em caso de sucesso
• 400 em caso de erro de validação no payload
• 404 em caso de registro não localizado
• 500 em caso de erro
Sobre o corpo das respostas dos endpoints:
• Insert e Update - objeto salvo
• Retrieve - objeto pesquisado
• Delete - booleano simbolizando sucesso da operação
3 - Criar nível de proteção por token para a API, considerando:
• As requisições devem ser feitas com um token no cabeçalho da requisição.
• Token precisa ser validado, caso inválido a API deve retornar uma resposta com status 403
4 - Criar documentação do tipo openapi v3 com Swagger para os endpoints e especificações acima
5 - Criar teste automatizados para os endpoints criados
Ao finalizar, deverá ser enviado o link do repositório e do sistema em produção, no caso de ter feito o deploy, pelo seguinte formulário: https://forms.gle/Cd2dqSe5iFuVCyod7
Irá ser avaliado:
- Seu conhecimento técnico e criatividade;
- Sua habilidade para resolver problemas de forma simples e eficiente;
- Boas práticas de código.
Boa sorte!
Equipe #roga_rocks