https://github.com/jonathanprojetos/tfc-trybe-football-club
TFC é um site informativo sobre partidas e classificações de times de futebol.
https://github.com/jonathanprojetos/tfc-trybe-football-club
bcryptjs cors docker docker-compose dotenv express express-async-errors joi mysql2 nodejs nodemon sequelize sequelize-cli test typescript
Last synced: 3 months ago
JSON representation
TFC é um site informativo sobre partidas e classificações de times de futebol.
- Host: GitHub
- URL: https://github.com/jonathanprojetos/tfc-trybe-football-club
- Owner: JonathanProjetos
- Created: 2022-10-09T01:11:26.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-21T20:03:30.000Z (over 2 years ago)
- Last Synced: 2025-02-05T07:29:03.019Z (5 months ago)
- Topics: bcryptjs, cors, docker, docker-compose, dotenv, express, express-async-errors, joi, mysql2, nodejs, nodemon, sequelize, sequelize-cli, test, typescript
- Language: TypeScript
- Homepage: trybe-football-club.vercel.app
- Size: 955 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Trybe Football Club
# Contexto
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.
## preview

## Importante:
- E aconselhável o uso de softwares de envio de requisições REST como:
- [Insomia](https://insomnia.rest/)
- [Postman](https://www.postman.com/)
- [Httpie](https://httpie.io/)## Técnologias utilizadas
> 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.
## Detalhes da Rota
#### Verbo POST : /login
##### Esperado
- O corpo da requisição deverá seguir o formato abaixo:
```json
{
"email": "[email protected]"
"password": "secret_admin"
}
```
- Se o login foi feito com sucesso, o resultado retornado deverá ser similar ao exibido abaixo, com um status http 200
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjU0NTI3MTg5fQ.XS_9AA82iNoiVaASi0NtJpqOQ_gHSHhxrpIdigiT-fc"
}
```
### Verbo GET : /login/validate##### Esperado
- A rota responde com um body contendo a role da pessoa logada.
```json
{ "role": "admin" }
```
### Verbo GET : /teams##### Esperado
- A rota responderá com este formato e status http 200.
```json
[
{
"id": 1,
"teamName": "Avaí/Kindermann"
},
{
"id": 2,
"teamName": "Bahia"
},
...
```
### Verbo GET : /teams/:id##### Esperado
- A rota responderá com este formato e status http 200.
```json
{
"id": 1,
"teamName": "Avaí/Kindermann"
}
```
### Verbo GET : /matches##### Esperado
- A rota responderá com este formato e status http 200.
```json
[
{
"id": 1,
"homeTeam": 16,
"homeTeamGoals": 1,
"awayTeam": 8,
"awayTeamGoals": 1,
"inProgress": false,
"teamHome": {
"teamName": "São Paulo"
},
"teamAway": {
"teamName": "Grêmio"
}
},
...
```
### Verbo POST : /matches##### Esperado
- O corpo da requisição deverá seguir o formato abaixo.
```json
{
"homeTeam": 16,
"awayTeam": 8,
"homeTeamGoals": 2,
"awayTeamGoals": 2,
"inProgress": true
}
```
- A rota responde com um body contendo este formato e status http 201.```json
{
"id": 1,
"homeTeam": 16,
"homeTeamGoals": 2,
"awayTeam": 8,
"awayTeamGoals": 2,
"inProgress": true,
}
```
### Verbo PATCH : /matches/:id/finish##### Esperado
- A rota deve receber um id é responderá com um body neste formato.
```json
{ "message": "Finished" }
```
- objetivo deste end-point e atualizar o status da partida de "Em andamento" para "Finalizada".### Verbo PATCH : /matches/:id
##### Esperado
- A rota deve receber um id é responderá com um body neste formato.
```json
{
"homeTeamGoals": 3,
"awayTeamGoals": 1
}```
- A rota responderá com este formato e status http 200.
```json
{ "message" : "Partida atualizada"}
```
### Verbo GET : /leaderboard/home##### Esperado
- A rota responderá com este formato e status http 200.
```json
[
{
"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"
},
```
### Verbo GET : /leaderboard/away##### Esperado
- A rota responderá com este formato e status http 200.
```json
[
{
"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"
},
```
### Verbo GET : /leaderboard##### Esperado
- A rota responderá com este formato e status http 200.
```json
[
{
"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"
},
```
## Instalando Dependências## Docker
```
cd TFC-Trybe-Football-Club/app
npm run compose:up:dev
docker logs --tail 1000 -f app_backendcaso 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.
```
## Sem o docker
```
cd TFC-Trybe-Football-Club/app/backend
npm install
npm run prestartabra outro terminal
cd TFC-Trybe-Football-Club/app/frontend
npm install
npm startserá nescessario configura o arquivo database/config conforme a conexão com o seu mysql
```
## Test
```bash
cd TFC-Trybe-Football-Club/app/backend
npm run test:coverage
- Foi implementado test de integração que cobre 89% das linhas.
```## Aviso Importante
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](https://docs.docker.com/engine/install/ubuntu/) site oficial