Skip to content

GustavoTorres94/TFC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trybe Futebol Clube ⚽

Badge em Desenvolvimento

Descrição

Uma aplicação que possui front-end e back-end. Fiquei responsável por realizar o diretório de back-end da aplicação, a Trybe entregou o front.
Aplicação do back consiste em gerenciamento de uma tabela de campeonato de Futebol. Com funcionalidades de Login, Partidas, Times e da Tabela.
Utilizando o Docker para o deploy, junto com o NODE Js, Sequelize e TypeScript. Segurança de Software através do JWT - Jason Web Token e bcrypt.
Aplicação possui teste unitários desenvolvido com o uso de Jest, Mocha e Chai.
Aplicação desenvolvida utilizando POO - Programação Orientada a Objetos.
Uma parte considerável da aplicação foi testada, pretendo cobrir toda a aplicação ainda.

Índice

Como Usar

  1. LINK DO DEPLOY
  2. Clone este repositório.
  3. Entre no diretório criado.
  4. Na raiz do proketo intale as dependências da aplicação, tanto front-end quanto back-end com o scrypt.
    npm run install:apps
    
  5. Na Raiz do projeto utilize o seguinte scrypt para "subir" os containers do Docker
    npm run compose:up
    
  6. Entre no diretório /app/backend
  7. Utilize o script de desnvolvimento para rodar a aplicação ou o de start para inicializar a aplicação, ambos rodam na PORT 3001
    npm run dev
    ou
    npm start
    
  8. Utlize um software de auxílio, insomnia ou semelhante, ou uma extensão do vscode, thunderclient ou semelhante, para realizar as requisições para os endpoints. Com o projeto clonado podes fazer requisições para
      localhost:3001/{endpoint}
    

Funcionalidades

Endpoints:
/login - { post }
/login/role - { get }
/login/all - { get }
/teams - { get }
/teams/:id - { get }
/matches - { get, post }
/matches/:id - { get }
/matches/:id/finish - { patch }
/matches/:id - { patch }
/leaderborad { get }
/leaderborad/away { get }
/leaderborad/home { get }
Testes

/login

Este endpoint contém um serviço para lidar com operações relacionadas a usuários, como autenticação, obtenção de usuários e verificação de papéis de usuário.

Funcionalidades Principais

  1. Obter Todos os Usuários { GET }
    • A função `getAllUsers` permite obter todos os usuários registrados no sistema.
    • Ela retorna uma lista de usuários com suas informações.

  2. Login de Usuário { POST }
    • A função `login` realiza o processo de autenticação de um usuário com base em um email e senha fornecidos.
    • Ela verifica se o email é válido e se a senha atende aos requisitos mínimos de comprimento.
    • Em seguida, verifica se o email corresponde a um usuário registrado no banco de dados e se a senha fornecida corresponde à senha registrada para esse usuário, usando BCRYPT.
    • Se a autenticação for bem-sucedida, a função gera um token JWT para o usuário autenticado.
    • Exemplo de corpo da Requisição:
        {
          "username": "string",
          "password": "string"
        }
      


  3. ["/login/role"] Obter Papel do Usuário { GET }
    • A função `getRole` obtém o papel (role) de um usuário com base nas informações decodificadas do token JWT.
    • Ela verifica se o usuário correspondente ao ID decodificado do token existe no banco de dados e retorna o papel associado a esse usuário.

/teams

Este endpoint contém um serviço para lidar com operações relacionadas a equipes, como obtenção de todas as equipes e obtenção de uma equipe específica por ID.

Funcionalidades Principais

  1. Obter Todas as Equipes { GET }
    • A função `getAllTeams` permite obter todas as equipes registradas no sistema.
    • Ela retorna uma lista de equipes com suas informações.

  2. ["/teams/:id"] Obter Equipe por ID { GET }
    • A função `getTeamById` permite obter uma equipe específica com base no seu ID.
    • Ela recebe o ID da equipe como parâmetro e retorna a equipe correspondente, se existir, ou null caso contrário.
    • Esta função é útil para buscar informações detalhadas de uma equipe específica.


/matches

Este endpoint contém um serviço para lidar com operações relacionadas a partidas de futebol, como obtenção de todas as partidas, obtenção de uma partida por ID, obtenção de partidas em andamento, finalização de uma partida, atualização de uma partida e criação de uma nova partida.

Funcionalidades Principais

  1. Obter Todas as Partidas { GET }
    • A função `getAllMatches` permite obter todas as partidas registradas no sistema.
    • Ela retorna uma lista de partidas com suas informações.

  2. ["/matches/:id"] Obter Partida por ID { Get }
    • A função `getMatchById` permite obter uma partida específica com base no seu ID.
    • Ela recebe o ID da partida como parâmetro e retorna a partida correspondente, se existir, ou null caso contrário.

  3. Obter Partidas em Andamento { GET }
    • A função `getMatchesInProgress` permite obter todas as partidas em andamento ou em progresso.
    • Ela recebe um valor como parâmetro e retorna as partidas em andamento, se existirem.

  4. ["/matches/:id/finish"] Finalizar uma Partida { PATCH }
    • A função `finishMatch` permite marcar uma partida como finalizada com base no seu ID.
    • Ela recebe o ID da partida como parâmetro e atualiza o status da partida para finalizada.

  5. ["/matches/:id"] Atualizar uma Partida { PATCH }
    • A função `updateMatch` permite atualizar os resultados de uma partida com base no seu ID.
    • Ela recebe o ID da partida, os gols marcados pelo time da casa e os gols marcados pelo time visitante como parâmetros e atualiza os resultados da partida.

  6. Criar uma Nova Partida { POST }
    • A função `createMatch` permite criar uma nova partida com base nos IDs dos times participantes e os gols marcados por cada time.
    • Ela verifica se os times existem no sistema e se são diferentes antes de criar a partida.
    • Em seguida, cria a partida no banco de dados com os dados fornecidos.
    • Exemplo do corpo da Requisição:
        {
          "homeTeamId": 16, // O valor deve ser o id do time
          "awayTeamId": 8, // O valor deve ser o id do time
          "homeTeamGoals": 2,
          "awayTeamGoals": 2
        }
      

/leaderboard

O endpoint de Leaderboard oferece funcionalidades para lidar com informações sobre pontuações, vitórias, derrotas, gols e eficiência de equipes em partidas.

LeaderBoardEntity:
A entidade LeaderBoardEntity fornece métodos auxiliares para calcular eficiência, filtrar e combinar informações da tabela de classificação.

Funcionalidades da Entidade

  1. Ordenar Tabela de Classificação
    • A função `sortLeaderboard`
    • ordena a tabela de classificação com base em critérios como total de pontos, vitórias, saldo de gols e gols marcados.

  2. Calcular Eficiência
    • A função `calculateEfficiency`
    • calcula a eficiência de uma equipe com base em pontos, empates e número de partidas.

  3. Filtrar e Combinar Tabelas
    • A função `fullFilteredStatus`
    • , `combine` e `combineLeaderboard` são responsáveis por filtrar, combinar e calcular as informações necessárias para a tabela de classificação.

Funcionalidades Principais do EndPoint

  1. ["/leaderboard/home"] Obter Status da Tabela de Classificação { GET }
    • A função `homeStatus ` permite obter o status atualizado da tabela de classificação das equipes que atuam como time da casa.
    • Ela retorna a tabela de classificação ordenada por critérios como total de pontos, vitórias, saldo de gols e gols marcados.

  2. ["/leaderboard/away"] Obter Status da Tabela de Classificação (Time Visitante) { GET }
    • A função `awayStatus` permite obter o status atualizado da tabela de classificação das equipes que atuam como time visitante.
    • Ela também retorna a tabela de classificação ordenada pelos mesmos critérios mencionados anteriormente.

  3. Obter Status Geral da Tabela de Classificação
    • A função `status` combina as informações da tabela de classificação dos times da casa e visitantes para fornecer uma visão geral e atualizada do desempenho das equipes.
    • Retorna a tabela de classificação combinada, ordenada pelos critérios de classificação.

Testes

A aplicação foi testada utilizando o Jest, Mocha e Chai. Os testes são unitários e estão no diretório /app/backend/src/tests.
Utilização de Mocks
Os comandos para testar a aplicação são os seguintes:

npm run test
npm run test:coverage

Tecnologias

Neste projeto utilizei as seguintes ferramentas:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors