Neste projeto, foi desenvolvido um site informativo sobre partidas e classificações de futebol.
- A aplicação foi feita de forma "dockerizada", tendo um container para o front-end, um para o back-end e um para o banco de dados (MySql).
- O back-end utiliza modelagem de dados através do Sequelize com typeScript e POO além de atender aos princípios do SOLID, padrões REST e arquitetura MSC.
- O front-end já havia sido implementado, sendo assim, tive que respeitar algumas regras de negócio para que minha API pudesse ser consumida corretamente.
- Para fazer modificações nas tabelas é necessário fazer login, o que lhe atribuirá um token de validação.
As senhas são armazenadas no banco de dados de maneira criptografada através do bcrypt.js e os tokens são gerados pelo jwt (json web token).
- Também foram feitos testes de integração para mais de 80% da aplicação.
Ver rotas
- POST
/login
para fazer login e receber um token. Utilize um body nesse formato:
{
"email": "admin@admin.com",
"password": "secret_admin"
}
- POST
/matches
para criar uma nova partida. Utilize um body nesse formato:
{
"homeTeam": 16, // O valor deve ser o id do time
"homeTeamGoals": 2,
"awayTeam": 8, // O valor deve ser o id do time
"awayTeamGoals": 2,
"inProgress": true,
}
- GET
/login/validate
deverá ter umheader
com parâmetroauthorization
, onde ficará armazenado otoken
gerado no login, retorna a role do usuário .
- GET
/teams
retorna todos os times.
- GET
/teams/:id
retornar dados de um time específico.
- GET
/matches
retorna dados de todas as partidas.
- GET
/matches/search?inProgress=true
retorna dados das partidas em andamento.
- GET
/matches/search?inProgress=false
retorna dados das partidas finalizadas.
- GET
/leaderboard
retorna a classificação geral dos times.
- GET
/leaderboard/home
retorna a classificações dos times da casa.
- GET
/leaderboard/away
retorna a classificações dos times fora de casa.
- PATCH
/matches/:id/finish
para atualizar a partida com o id correspondente para finalizada.
- PATCH
/matches/:id
para atualizar o saldo de gols da partida com o id correspondente. Utilize um body nesse formato:
{
"homeTeamGoals": 2,
"awayTeamGoals": 1
}
Pré-requisitos
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
É recomendado utilizar algum cliente HTTP, como Postman ou o Insomnia.
Também é bom ter um editor para trabalhar com o código como VSCode
⚠️ 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.14.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.14 --lts
nvm use 16.14
nvm alias default 16.14
➡️ Odocker-compose
deve ter versão igual ou superior àˆ1.29.2
:
- Use esse link de referência para realizar a instalação corretamente no ubuntu;
- Acesse o [link da documentação oficial com passos para desinstalar] (https://docs.docker.com/compose/install/#uninstallation) caso necessário.
Antes de tudo clone o repositório
git clone git@github.com:TonyyCruz/trybe-futebol-clube.git
Execute na raiz do projeto
npm run install:apps
npm run compose:up:dev
-
Esse serviço irá inicializar três containers chamados app_frontend_1, app_backend e outro chamado db.
-
O back-end ficará acessível em
http://localhost:3001
-
O front-end ficará acessível em
http://localhost:3000
-
⚠️ Atenção: Não esqueça de renomear o arquivo.env.example
em /app/backend para.env
Scripts
- Iniciar a aplicação com nodemon:
npm run compose:up:dev
- Finalizar a aplicação com nodemon:
npm run compose:up:dev
- Iniciar a aplicação padrão:
npm run compose:up
- Finalizar a aplicação padrão:
npm run compose:down
- Resetar o banco de dados, precisa estar em app/backend:
npm run db:reset
- Testes de integração, precisa estar em app/backend:
npm test