Este projeto foi desenvolvido utilizando TypeScript, serverless framework e express como framework web, seguindo os princípios da arquitetura limpa. O objetivo é criar uma API RESTful para gerenciar funcionários. O Jest foi utilizado para desenvolver os testes unitários e a documentação foi feita em markdown.
O desafio consiste em desenvolver uma solução para uma vaga na Stefanini, em parceria com o cliente Raízen, seguindo os seguintes passos:
- Utilizar Clean Architecture.
- Versionar o projeto no GitHub, em um repositório público.
- Documentar claramente o projeto.
- Um funcionário deve possuir os seguintes atributos: Id, Idade, Nome e Cargo.
- As informações devem ser armazenadas em um banco de dados, relacional ou não relacional, hospedado em uma infraestrutura AWS.
- A Lambda deve ser capaz de consultar, deletar e atualizar um funcionário, e a API deve ser acessível via internet.
- Os recursos podem ser provisionados utilizando Serverless Framework ou Terraform.
- Realizar testes unitários utilizando Jest.
- Execute
npm install
para instalar as dependências. - Configure as chaves de acesso da AWS, podendo ser configuradas utilizando o AWS CLI.
Execute o comando para rodar offline:
sls offline --stage prd
Execute o comando para implantar na AWS e testar:
serverless deploy --stage prd
Certifique-se de ter as permissões necessárias e que sua conta AWS esteja corretamente configurada para implantar os recursos especificados no Serverless Framework.
npm run test
Uma maneira de aumentar ainda mais a confiabilidade do código seria incluir testes de unidade que abranjam todo o código, além de adicionar testes de integração. Embora não tenha sido possível desenvolvê-los devido a restrições de tempo, também seria benéfico considerar a inclusão de uma biblioteca para facilitar a criação de documentação de forma mais dinâmica.
Além disso, poderia-se melhorar a forma de tratar o id, usando UUID ou alguma forma de gerenciar os IDs de forma incremental.
A descrição do desafio está disponível no seguinte repositório do GitHub: