Back-end:
- Typescript com Conceitos POO e SOLID;
- NodeJs;
- Express;
- Sequelize;
- Mocha, Chai e Sinon para testes de integração e Docker;
👨💻 O que foi desenvolvido
O TFC
é um site informativo sobre partidas e classificações de futebol simulando a tabela do Brasileirão 2022! ⚽️
- Foi desenvolvo o
TFC
, onde fiquei responsável por desenvolver uma API (utilizando o métodoTDD
) e também integrar - através do docker-compose - as aplicações para que elas funcionem consumindo um banco de dados.
Nesse projeto, eu construi um back-end dockerizado utilizando modelagem de dados através do Sequelize.O desenvolvimento deste projeto respeitou regras de negócio e a API é consumida pelo front-end.
Temos a opção de adicionar uma partida, mas para adicionar é necessário ter um token e a pessoa deverá estar logada para fazer as alterações. Temos um relacionamento entre as tabelas teams
e matches
para fazer as atualizações das partidas.
Pude implementar regras de negócio para popular adequadamente a tabela disponível no front-end onde ela é exibida para a pessoa usuária do sistema.
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
sequelize
e via porta3002
dolocalhost
; - 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.example
para 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/server.ts
; - 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:3001
através dos endpoints que foi construído.
4️⃣ Docker:
- O
docker-compose
une 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.
Este projeto já vem com as dependências relacionadas ao linter configuradas nos arquivos package.json
nos seguintes caminhos:
app/backend/package.json
Para rodar o ESLint
em um projeto, basta executar o comando npm install
dentro do projeto e depois npm run lint
. Se a análise do ESLint
encontrar problemas no seu código, tais problemas serão mostrados no seu terminal. Se não houver problema no seu código, nada será impresso no seu terminal.
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
node
e usá-la:nvm install 16 --lts
nvm use 16
nvm 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
healthcheck
em 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 comandoping
no 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:
Aqui não houve problema com o
tsc
, porém a senha para acesso ao banco pelo sequelize estava errada.
🎲 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: