TFC é um site informativo sobre partidas e classificações de times de futebol! ⚽️. O objetivo deste desafio é desenvolver uma API utilizando modelagem de dados através do Sequelize para ser consumida pelo front que já está completamente implementado. O acesso aos end-points, segue os princípios REST. Para acessar alguns endereços vinculado ao usuário é necessário fazer autenticação e quando autenticado a API responderá trazendo um token no corpo da requisição. O token deverá ser inserido no cabeçalho de cada requisição privada, com o intuito de autenticação.
Desenvolvido em nodejs.
Linguagem: Typescript.
ORM : Sequelize
Framework utilizado: Express.
Libs: nodemon, eslint, express-async-errors, dotenv, joi, jsonwebtoken, mysql2, sequelize-cli, cors, jest, mocha, chai, sinon, bycrptjs.
- O corpo da requisição deverá seguir o formato abaixo:
{
"email": "admin@admin.com"
"password": "secret_admin"
}
- Se o login foi feito com sucesso, o resultado retornado deverá ser similar ao exibido abaixo, com um status http 200
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjU0NTI3MTg5fQ.XS_9AA82iNoiVaASi0NtJpqOQ_gHSHhxrpIdigiT-fc"
}
- A rota responde com um body contendo a role da pessoa logada.
{ "role": "admin" }
- A rota responderá com este formato e status http 200.
[
{
"id": 1,
"teamName": "Avaí/Kindermann"
},
{
"id": 2,
"teamName": "Bahia"
},
...
- A rota responderá com este formato e status http 200.
{
"id": 1,
"teamName": "Avaí/Kindermann"
}
- A rota responderá com este formato e status http 200.
[
{
"id": 1,
"homeTeam": 16,
"homeTeamGoals": 1,
"awayTeam": 8,
"awayTeamGoals": 1,
"inProgress": false,
"teamHome": {
"teamName": "São Paulo"
},
"teamAway": {
"teamName": "Grêmio"
}
},
...
- O corpo da requisição deverá seguir o formato abaixo.
{
"homeTeam": 16,
"awayTeam": 8,
"homeTeamGoals": 2,
"awayTeamGoals": 2,
"inProgress": true
}
- A rota responde com um body contendo este formato e status http 201.
{
"id": 1,
"homeTeam": 16,
"homeTeamGoals": 2,
"awayTeam": 8,
"awayTeamGoals": 2,
"inProgress": true,
}
- A rota deve receber um id é responderá com um body neste formato.
{ "message": "Finished" }
- objetivo deste end-point e atualizar o status da partida de "Em andamento" para "Finalizada".
- A rota deve receber um id é responderá com um body neste formato.
{
"homeTeamGoals": 3,
"awayTeamGoals": 1
}
- A rota responderá com este formato e status http 200.
{ "message" : "Partida atualizada"}
- A rota responderá com este formato e status http 200.
[
{
"name": "Santos",
"totalPoints": 9,
"totalGames": 3,
"totalVictories": 3,
"totalDraws": 0,
"totalLosses": 0,
"goalsFavor": 9,
"goalsOwn": 3,
"goalsBalance": 6,
"efficiency": "100.00"
},
{
"name": "Palmeiras",
"totalPoints": 7,
"totalGames": 3,
"totalVictories": 2,
"totalDraws": 1,
"totalLosses": 0,
"goalsFavor": 10,
"goalsOwn": 5,
"goalsBalance": 5,
"efficiency": "77.78"
},
- A rota responderá com este formato e status http 200.
[
{
"name": "Palmeiras",
"totalPoints": 6,
"totalGames": 2,
"totalVictories": 2,
"totalDraws": 0,
"totalLosses": 0,
"goalsFavor": 7,
"goalsOwn": 0,
"goalsBalance": 7,
"efficiency": "100.00"
},
{
"name": "Corinthians",
"totalPoints": 6,
"totalGames": 3,
"totalVictories": 2,
"totalDraws": 0,
"totalLosses": 1,
"goalsFavor": 6,
"goalsOwn": 2,
"goalsBalance": 4,
"efficiency": "66.67"
},
- A rota responderá com este formato e status http 200.
[
{
"name": "Palmeiras",
"totalPoints": 6,
"totalGames": 2,
"totalVictories": 2,
"totalDraws": 0,
"totalLosses": 0,
"goalsFavor": 7,
"goalsOwn": 0,
"goalsBalance": 7,
"efficiency": "100.00"
},
{
"name": "Corinthians",
"totalPoints": 6,
"totalGames": 3,
"totalVictories": 2,
"totalDraws": 0,
"totalLosses": 1,
"goalsFavor": 6,
"goalsOwn": 2,
"goalsBalance": 4,
"efficiency": "66.67"
},
cd TFC-Trybe-Football-Club/app
npm run compose:up:dev
docker logs --tail 1000 -f app_backend
caso queira rodar comandos dentro do dcoker:
docker exec -it app_backend bash
Se todos os passos forem feitos com sucesso o front também estará disponível.
cd TFC-Trybe-Football-Club/app/backend
npm install
npm run prestart
abra outro terminal
cd TFC-Trybe-Football-Club/app/frontend
npm install
npm start
será nescessario configura o arquivo database/config conforme a conexão com o seu mysql
cd TFC-Trybe-Football-Club/app/backend
npm run test:coverage
- Foi implementado test de integração que cobre 89% das linhas.
Caso queira roda a aplicação via docker deverá ter o docker instalado no dispositivo, caso não esteja instalado você pode encontra como instalar neste link site oficial