/api-futebol-clube

O aplicativo TFC é um site informativo sobre partidas e classificações de futebol, com a criação de uma API consumida por um front-end já disponibilizado pela Trybe e implementação de testes de integração e cobertura

Primary LanguageTypeScript

📄 Sobre

O aplicativo TFC é um site informativo sobre partidas e classificações de futebol! ⚽️ com a criação de uma API consumida por um front-end já disponibilizado pela Trybe e implementação de testes de integração e cobertura

📋 Executando o problema

Clone o repositório:

git@github.com:yvasconcellos/api-futebol-clube.git
🐳 Rodando no Docker vs Localmente

Com Docker

Rode os serviços node e db com o comando docker-compose up -d.

  • Lembre-se de parar o mysql se estiver usando localmente na porta padrão (3306), ou adapte, caso queira fazer uso da aplicação em containers
  • Esses serviços irão inicializar um container chamado trybesmith e outro chamado trybesmith_db.
  • A partir daqui você pode rodar o container trybesmith via CLI ou abri-lo no VS Code.

Use o comando docker exec -it trybesmith bash.

  • Ele te dará acesso ao terminal interativo do container criado pelo compose, que está rodando em segundo plano.

Instale as dependências [Caso existam] com npm install

⚠ Atenção ⚠ Caso opte por utilizar o Docker, TODOS os comandos disponíveis no package.json (npm start, npm test, npm run dev, ...) devem ser executados DENTRO do container, ou seja, no terminal que aparece após a execução do comando docker exec citado acima.

⚠ Atenção ⚠ O git dentro do container não vem configurado com suas credenciais. Ou faça os commits fora do container, ou configure as suas credenciais do git dentro do container.

⚠ Atenção ⚠ Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.

⚠ Atenção ⚠ Caso você esteja usando macOS e ao executar o docker-compose up -d se depare com o seguinte erro:

The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.db: 'platform'
Unsupported config option for services.node: 'platform'

Foram encontradas 2 possíveis soluções para este problema:

  1. Você pode adicionar manualmente a option platform: linux/amd64 no service do banco de dados no arquivo docker-compose.yml do projeto, mas essa é uma solução local e você deverá reproduzir isso para os outros projetos.
  2. Você pode adicionar manualmente nos arquivos .bashrc, .zshenv ou .zshrc do seu computador a linha export DOCKER_DEFAULT_PLATFORM=linux/amd64, essa é uma solução global. As soluções foram com base nesta fonte.

Sem Docker

Instale as dependências [Caso existam] com npm install

⚠ Atenção ⚠ Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.

🔎 Rotas

LOGIN

POST /login

• Se o login for feito com sucesso retorna um token para o usuário.
• O endpoint deve receber a seguinte estrutura:

  {
    "username": "string",
    "password": "string"
  }

GET /login/validate

• O Token recebido no método POST deve ser passado em Authorization no Headers.
• Caso correto, retorna o Role do usúario.

TEAMS

GET /teams

• Retorna todos os times cadastrados na base de dados.

GET /teams/:id

• Retorna todos o time referente ao id passado como Params.

MATCHES

GET /matches

• Retorna todas as partidas cadastradas na base de dados.

GET /matches?inProgress=true

• Retorna as partidas em progresso cadastradas na base de dados.

GET /matches?inProgress=false

• Retorna as partidas finalizadas cadastradas na base de dados.

POST /matches

• Cadastrada partidas na base de dados.
• O endpoint deve receber a seguinte estrutura (Token deve ser passado no Header):

  {
    "homeTeam": "number",
    "awayTeam": "number",
    "homeTeamGoals": "number",
    "awayTeamGoals": "number"
  }

PATCH /matches/:id/finish

• Finaliza partidas em progresso na base de dados.

PATCH /matches/:id

• Atualiza partidas em progresso na base de dados.
• O endpoint deve receber a seguinte estrutura (Token deve ser passado no Header):

  {
    "id": "number",
    "homeTeamGoals": "number",
    "awayTeamGoals": "number"
  }
LEADERBOARD

GET /leaderboad

• Retorna a classificação geral.

GET /leaderboard/home

• Retorna a classificação baseada no desempenho em casa.

GET /leaderboard/away

• Retorna a classificação baseada no desempenho fora de casa.

👨🏻‍💻 Habilidades

  • Criação de API REST utilizando a arquitetura de camadas (Model-Service-Controller);
  • Utilização de TDD ao longo do projeto para efetuar testes de integração e cobertura;
  • Modelagem de dados com MySQL através do Sequelize;
  • Utilização de Typescript com Banco de Dados;
  • Utilização de JWT;
  • Criação e associação de tabelas usando models do sequelize;
  • Conhecimento dos pilares da Programação Orientada a Objetos: Herança, Abstração, Encapsulamento e Polimorfismo;
  • habilidade de utilizar Composição;
  • Implementação em TypeScript de Classes, Instâncias, Atributos, Métodos e Objetos;
  • Validar conhecimento e aplicação dos princípios SOLID.

Stacks Utilizadas