👨💻 O que foi desenvolvido
O TFC é um site informativo sobre partidas e classificações de futebol! ⚽️
🏟️ Estrutura do projeto
O projeto é composto de 4 entidades importantes para sua estrutura:
1️⃣ Banco de dados:
- Será um container docker MySQL já 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
sequelizee via porta3306dolocalhost; - 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.
2️⃣ Back-end:
- Será o ambiente que você realizará a maior parte das implementações exigidas.
- Deve rodar na porta
3001, pois o front-end faz requisições para ele nessa porta por padrão; - A aplicação deve ser inicializada a partir do arquivo
app/backend/src/server.ts; - 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:3001através dos endpoints que você deve construir nos requisitos.
4️⃣ Docker:
- O
docker-composetem a responsabilidade de unir todos os serviços conteinerizados (backend, frontend e db) e subir o projeto completo com o comandonpm run compose:up; - Você deve configurar as
Dockerfilescorretamente nas raízes dofront-endeback-end, para conseguir inicializar a aplicação;
Aqui você encontrará orientações e dicas sobre o projeto.
🎲 Sequelize
Diagrama de Entidade-Relacionamento (DER)
package.json do diretório app/backend contém um script db:reset que é responsável por "dropar" o banco, recriar e executar as migrations e seeders. Você pode executá-lo dentro do container de backend com o comando npm run db:reset se por algum motivo precisar recriar a base de dados;
app/backend/src/database/seeders para popular o banco.
app/backend.
Esse projeto é composto de 4 fluxos principais:
- Teams (Times)
- Users e Login (Pessoas Usuárias e Credenciais de acesso)
- Matches (Partidas)
- Leaderboards (Placares)
- Nessa seção temos o diagrama de entidades;
Introdução
- Os requisitos a seguir consideram o consumo da rota
/teamspara retornar os nomes dos times associados à partida na renderização do front-end
Introdução
-
A rota utilizada deve ser (
/login); -
A rota deve receber os campos
emailepassworde esses campos devem ser validados no banco de dados:- O campo
emaildeve receber um email válido. Ex:tfc@projeto.com; - O campo
passworddeve ter mais de 6 caracteres. - Além de válidos, é necessário que o email e a senha estejam cadastrados no banco para ser feito o login;
- O campo
-
O body da requisição deve conter o seguinte formato:
{ "email": "string", "password": "string" }
Introdução
- A rota utilizada deve ser (
/matches);
Introdução
- `Classificação`: Posição na classificação;
- `Time`: Nome do time;
- `P`: Total de Pontos;
- `J`: Total de Jogos;
- `V`: Total de Vitórias;
- `E`: Total de Empates;
- `D`: Total de Derrotas;
- `GP`: Gols marcados a favor;
- `GC`: Gols sofridos;
- `SG`: Saldo total de gols;
- `%`: Aproveitamento do time.
-
Todas as regras de negócio e cálculos necessários deverão ser realizados no seu back-end. A aplicação front-end - que já está pronta - apenas renderizará essas informações.
-
Para calcular o
Total de Pontos, você deve levar em consideração que:- O time
vitorioso: marcará +3 pontos; - O time
perdedor: marcará 0 pontos; - Em caso de
empate: ambos os times marcam +1 ponto.
- O time
-
Para o campo
Aproveitamento do time (%), que é a porcentagem de jogos ganhos, use a seguinte fórmula:[P / (J * 3)] * 100, onde:P: Total de Pontos;J: Total de Jogos.
Obs.: O seu resultado deverá ser limitado a
duas casas decimais. -
Para calcular
Saldo de Golsuse a seguinte fórmula:GP - GC, onde:GP: Gols marcados a favor;GC: Gols sofridos.
-
O resultado deverá ser ordenado sempre de forma decrescente, levando em consideração a quantidade de pontos que o time acumulou. Em caso de empate no
Total de Pontos, você deve levar em consideração os seguintes critérios para desempate:
Ordem para desempate
- 1º Total de Vitórias;
- 2º Saldo de gols;
- 3º Gols a favor;
Os seguintes pontos serão avaliados:
- Se a lista de classificação está correta;
- Se a regra de classificação se mantém mesmo com mudanças na classificação;
- Se a tabela de classificação tem 10 colunas;
- Se a tabela tem uma linha para cada time.
Exemplo de retorno esperado:
[
{
"name": "Palmeiras",
"totalPoints": 13,
"totalGames": 5,
"totalVictories": 4,
"totalDraws": 1,
"totalLosses": 0,
"goalsFavor": 17,
"goalsOwn": 5,
"goalsBalance": 12,
"efficiency": 86.67
},
{
"name": "Corinthians",
"totalPoints": 12,
"totalGames": 5,
"totalVictories": 4,
"totalDraws": 0,
"totalLosses": 1,
"goalsFavor": 12,
"goalsOwn": 3,
"goalsBalance": 9,
"efficiency": 80
},
{
"name": "Santos",
"totalPoints": 11,
"totalGames": 5,
"totalVictories": 3,
"totalDraws": 2,
"totalLosses": 0,
"goalsFavor": 12,
"goalsOwn": 6,
"goalsBalance": 6,
"efficiency": 73.33
},
...
]
