Sobre • Diferencial • Instruções • Demostração • End Points • License
A partir de uma aplicação Front-End desenvolvida pela Trybe, foi desenvolvido um API para prover as informações necessárias para um site informativo sobre partidas e classificações de futebol!
- Construída com Node.js, Express, Typescript, MySQL, Sequelize e Docker
- Utilizando os princípios SOLID e Programação Orientada a Objetos
- Aplicando Arquitetura de Software, com as camadas de Modelo, Serviço e de Controladores
- Testes de Integração criadas utilizando Mocha, Chai, ChaiHTTP e Sinon
Essa é a minha Obra Prima, me dediquei muito a construir o front-end, e ele foi feito com perfeição, usando um único handler de erro capaz de administrar erros de vários tipos, foi feito completamente em Typescript pensando em escalabilidade, todo código é extremamente legível e resumido, todas as funções são bem framentadas por necessidade, toda estrutura do Back-end feita em MSC é pensada para o código principal só rodar depois de todas as validações passarem, de fato, uma obra de arte.
Este projeto é divido em duas partes:
- Backend (API)
- Frontend
💡O Backend deve estar rodando em sua máquina para que o frontend seja renderizado
Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas: [Git](https://git-scm.com), [Node.js](https://nodejs.org/en/). Além disto é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/)
# Clone este repositório
# Acesse o terminal do seu sistema operacional e escolha uma pasta de sua preferencia
# cole o comando abaixo no terminal
$ git clone git@github.com:JoaoAlberto20/trybe-futebol-fc.git
# Entre na pasta clonada com seguinte comando
$ cd trybe-futebol-fc
# Rodando a aplicação com DOCKER em modo de Desenvolvimento:
$ npm run compose:up:dev
$ npm run compose:down:dev # para parar completamente a aplicação
# Ronde a aplicação com DOCKER em Produção:
$ npm run compose:up
$ npm run compose:down # para parar completamente a aplicação
# Rodando os teste:
$ cd app/backend
$ npm run test:
# O servidor inciará na porta:3001 - acesse < http://localhost:3001 >
#### 🎲 Rodando a aplicação (Frontend)
# Para acessar o frontend basta acessar o seu localhost na url
# O servidor inciará na porta:3000 - acesse < http://localhost:3000/ >
Método | Funcionalidade | URL |
---|---|---|
POST |
Realiza o login do usuário | http://localhost:3001/login |
GET |
Avalia se o usuário é o administrador | http://localhost:3001/login/validate |
Nessa requisição POST é necessário informar o seguinte JSON:
{
"email": "Nome do Usuário",
"password": "senha_secreta"
}
Método | Funcionalidade | URL |
---|---|---|
GET |
Retorna todos os times cadastrados | http://localhost:3001/teams |
GET |
Retorna um time específico | http://localhost:3001/teams/:id |
Método | Funcionalidade | URL |
---|---|---|
GET |
Retorna todos as partidas cadastradas | http://localhost:3001/matches |
GET |
Retorna todos as partidas cadastradas em progresso | http://localhost:3001/matches?inProgress=true |
GET |
Retorna todos as partidas cadastradas finalizadas | http://localhost:3001/matches?inProgress=false |
POST |
Criação de uma nova partida | http://localhost:3001/matches |
PATCH |
Atualiza a chave 'inProgress' para finalidado de uma partida específica | http://localhost:3001/matches/:id/finish |
PATCH |
Atualiza os gols de uma partida específica | http://localhost:3001/matches/:id |
Nessa requisição POST é necessário informar o seguinte JSON:
{
"homeTeam": 16, // O valor deve ser o id do time
"awayTeam": 8, // O valor deve ser o id do time
"homeTeamGoals": 2,
"awayTeamGoals": 2,
"inProgress": true
}
e na requisição PATCH para atualizar os gols realizados é necessário informar o seguinte JSON:
{
"homeTeamGoals": 3,
"awayTeamGoals": 1
}
Método | Funcionalidade | URL |
---|---|---|
GET |
Retorna a classificação geral dos times | http://localhost:3001/leaderboard |
GET |
Retorna a classificação dos times mandantes | http://localhost:3001/leaderboard/home |
GET |
Retorna a classificação dos times visitantes | http://localhost:3001/leaderboard/away |