Skip to content

Neste projeto, foi desenvolvido um site informativo sobre partidas e classificações de futebol

Notifications You must be signed in to change notification settings

TonyyCruz/trybe-futebol-clube

Repository files navigation

Trybe Futebol Clube

Neste projeto, foi desenvolvido um site informativo sobre partidas e classificações de futebol.


📃 Sobre o Projeto

- 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.


Rotas utilizáveis

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 um header com parâmetro authorization, onde ficará armazenado o token 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
}


🛠 Tecnologias e Bibliotecas utilizadas no desenvolvimento do projeto


🚀 Como executar o projeto

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:


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 prontos

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


🎲 Diagrama