Projeto criado durante um evento da escola online de tecnologia Alura onde todos os alunos receberam um conjunto de informações via Trello e instruções via lives e videos gravados para criarem uma API REST para um projeto de gestão financeira. Os cards Trello são dividios semanalmente, sendo disponibilizado um novo quadro a cada semana.
Nesta primeira semana as tarefas foram referentes a criação dos endpoints para o CRUD de receitas e despesas, respeitando as regras de negócio estabelecidas.
Para a elaboração das tarefas os alunos tem total liberdade de escolha quanto a linguagem de programação ou mesmo os métodos de criação de bancos de dados e classes a serem utilizadas. Abaixo detalhei o que elaborei nesta primeira etapa do projeto:
Para a elaboração do projeto utilizei MySQL com Flyway, permitindo versionamento do banco de dados e controle das querys lanças ao banco de dados dentro da pasta resources/db/migration.
Por questão de prática e até mesmo para treino e aperfeiçoamento escolhi a linguagem JAVA, que é a que tenho maior interesse, assim como o Framework Spring.
Para realização dos testes nesta primeira semana foi utilizado o POSTMAN.
Haviam inúmeras formas de gerar o banco de dados para os dois endpoints, porém preferi tentar começando com apenas uma tabela no banco de dados, utilizando uma classe Lancamento como entidade e uma tabela lancamento no banco de dados, permitindo assim que todos os dados fossem cadastrados em uma mesma tabela, sendo diferenciados pela coluna adicional tipo, provida por um enum TipoLancamentoEnum. Com isso reaproveitei grande parte do código escrito, apenas separando os controllers para endpoints diferentes, permitindo que alterações futuras possam ser feitas separadamente sem problemas maiores. Também utilizei de classes Service para poder gerir melhor as validações, realizando verificações mais intensas fora da classe controller.
- Criar o banco de dados;
- Criar endpoints para o CRUD de Receitas e Despesas;
- Validar dados;
- Realizar testes manuais via postman
Nesta segunda semana recebemos um novo quadro no Trello com as informações que precisariam ser incluidas ou alteradas no sistema, considerando que ele foi liberado para a utilização e foi recebido o feedback dos clientes da aplicação, sendo necessário realizar adaptações no banco de dados e o desenvolvimento de novas funcionalidades.
Como descrito no card do Trello, se fez necessário adicionar um novo campo nos lançamentos referentes as despesas, sendo assim achei por bem elaborar duas tabelas separadas, criando as tabelas receitas e despesas e suas respectivas entidades, onde cada uma receberia os dados separadamente, permitindo um futuro crescimento do banco e também de funcionalidades individuais, também utilizei de um ENUM para a categorização das despesas Após elaborar as entidades, refatorei os controllers, repositorys e criei uma classe service para realizar a etapa de geração de resumos, usando recurso do JAVA 8, como o stream, para realizar a soma por categoria e a geração do relatório mensal. Por fim criei testes automatizados focando apenas nos controllers com testes que utilizassem o mesmo banco de dados e realizassem a chamada dos repositorys e das services conforme necessidade, realizando o teste de forma mais abrangente e completa.
- Alterar o banco de dados para aceitar um novo campo de categorias para as despesas;
- Criar um endpoint para realizar a listagem por mês de despesas e receitas;
- Criar um endpoint para gerar um resumo mensal das despesas e receitas;
- Criar o endpoint para a busca de receitas e despesas por descrição.
Nestas semanas recebemos as tarefas de implementar autenticação e também o deploy da aplicação.
Para a implementação da parte de segurança adicionei as dependências do Spring Security e também do Token JWT fornecido pelo Auth0, com isso a implementação foi realizada com criptografia BCrypt para as senhas e com a criação de um novo endpoint para login (/login), onde se é possível realizar o acesso com um usuário padrão, sendo enviado em um json os dados abaixo via método POST:
{
"login": "bruno.campos@financas.com.br",
"senha": "123456"
}
A partir deste endpoint se recebe um Token de acesso que deverá ser utilizado para realizar as requisições para todos os outros endpoints, que agora estarão bloqueados para requisições sem autorização.
Quanto ao Deploy confesso não ter muita experiência, por isso tive muitas dificuldades, então resolvi deixar esta parte desativada por hora.
Tomei a liberdade de adicionar também uma documentação utilizando o Swagger UI.
- Aumentar a segurança da API gerando um novo endpoint para login e realizando a verificação stateless para acesso em todas as requisições;
- Realizar o deploy da aplicação;
- Criar Documentação. (EXTRA!)





