Front-end
- React JS;
- Tailwind
Back-end
- NodeJs;
- Express;
- Sequelize;
Testes
- Mocha, Chai e Sinon;
Banco de dados
- MySQL;
Aplicação Conteinerizada
- Docker;
👨💻 O que foi desenvolvido
O Cash Transfer é um site para fazermos transferências de dinheiro entre contas!
-
Foi desenvolvido o
Cash Transfer, onde fiquei responsável por desenvolver uma API e também integrar as aplicações para que elas funcionem consumindo um banco de dados. -
Pude também implementar com que o front-end consumisse essa API, fazendo as requisições via
AXIOS.
- Cadastro de novos usuários;
- Para fazer transações entre contas cadastradas no site;
- Atualização de saldo assim que a transação concluída;
- Fale conosco;
- Em andamento:
- Retirar extrato das últimas transações;
- Notificações de transações
Nesse projeto, eu construi uma aplicação dockerizado utilizando modelagem de dados através do Sequelize. A API é consumida pelo front-end.
Temos a opção fazer diversas transações com muita facilidade.
Estrutura do projeto
O projeto é composto de 4 entidades importantes na sua estrutura:
1️⃣ Banco de dados:
- Container docker MySQL configurado no docker-compose através de um serviço definido como
db. - Tem o papel de fornecer dados para o serviço de backend.
- Durante a execução dos testes sempre vai ser acessado pelo
sequelizee via porta3002dolocalhost; - Você também pode conectar a um Cliente MySQL (Workbench, Beekeeper, DBeaver e etc), colocando as credenciais configuradas no docker-compose no serviço
db. - Adicionei um arquivo no local
/app/backend/.env.examplepara caso você queira rodar o banco de dados localmente, basta renomea-lo para .env e as váriaveis de ambiente já estão configuradas ao docker.
2️⃣ Back-end:
- Ele roda na porta
3001, pois o front-end faz requisições para ele nessa porta por padrão; - Sua aplicação é inicializada a partir do arquivo
app/backend/src/app.js; - Ela garanta que o
expressé executado e a aplicação ouve a porta que vem das variáveis de ambiente;
3️⃣ Front-end:
- O front se comunica com serviço de back-end pela url
http://localhost:3001através dos endpoints que foi construído.
4️⃣ Docker:
- O
docker-composeune todos os serviços conteinerizados (backend, frontend e db) e sobe o projeto completo com o comandonpm run compose:up;
🕵️ Linter
Para garantir a qualidade do código, usei o ESLint para fazer a sua análise estática.
Você também pode instalar o plugin do ESLint no VSCode: bastar ir em extensions e baixar o plugin ESLint.
⚠️ Configurações mínimas para execução do projeto
Na sua máquina você deve ter:
- Sistema Operacional Distribuição Unix
- Node versão 16
- Docker
- Docker-compose versão >=1.29.2
➡️ O node deve ter versão igual ou superior à 16.15.0 LTS:
- Para instalar o nvm, acesse esse link;
- Rode os comandos abaixo para instalar a versão correta de
nodee usá-la:nvm install 16 --ltsnvm use 16nvm alias default 16
➡️ Odocker-compose deve ter versão igual ou superior àˆ1.29.2:
🐋 Rodando no Docker
### Docker e Docker-compose
⚠ O seu docker-compose precisa estar na versão 1.29 ou superior. ⚠ Veja aqui a documentação para atualizar o docker-compose.
- Para rodar o projeto por completo, basta digitar o código em seu terminal
npm run compose:up;
⚠️ Inicialização do compose e verificação dos logs das aplicações
-
Considerando o uso do parâmetro
healthcheckem cada container do seudocker-compose.yml, a inicialização dos containers deve aguardar o comando de status de saúde (o que valida se aquele container está operacional ou não):- No container
db, representado por um comandopingno banco de dados; - No back-end, representado por um comando
lsof, que vai procurar aplicações ativas na porta definida (por padrão, no caso3001); - No front-end, representado por um comando
lsof, que vai procurar aplicações ativas na porta definida (por padrão, no caso3000).
- No container
-
Caso os containers respeitem as premissas anteriores, os mesmos devem ser criados sem maiores problemas:
- Em caso de algum problema (no back-end, por exemplo), você deve se deparar com alguma mensagem do tipo:
VERIFIQUE OS LOGS DO DOCKER PARA SABER O QUE HOUVE DE INCORRETO NA INICIALIZAÇÃO DO DOCKER
Rodando somente o BANCO MYSQL com Docker
-
Rode este comando no terminal
docker run -dit --name dockerSQL -e MYSQL_ROOT_PASSWORD=123456 -v ~/mysql_data:/var/lib/mysql -p 3002:3306 mysql -
Coloque as credenciais como refere a imagem abaixo e clique em Store in Keychain para colocar a senha que setamos do container MYSQL

-
Para rodar o projeto por completo:
- Abra dois terminais;
- Entre na pasta /app
- Rode em seu terminal
npm run start:backende no outronpm run start:frontend;
Documentação da API
Utilizei a ferramenta Swagger para documentar toda a API que foi desenvolvida neste projeto Você pode rodar ela juntamente com o projeto: - Ao rodar a porta 3001, basta ir para o localhost acessando `http://localhost:3001/docs` e terá acesso a todos endpoints com seus respectivos retorno esperados.
🎲 Sequelize
Para o desenvolvimento, foi baseado no Diagrama de Entidade-Relacionamento (DER) para construir a modelagem do banco de dados. Com essa imagem você já consegue saber:





