Uma aplicação full-stack para gerenciamento de partidas e classificação de times de futebol, com sistema de autenticação e painel administrativo.
O TFC é uma plataforma web completa que permite:
- Visualização de partidas: Acompanhe partidas em andamento e finalizadas
- Classificação (Leaderboard): Veja a classificação geral, mandante e visitante dos times
- Gestão de partidas: Administradores podem adicionar, editar e finalizar partidas
- Autenticação JWT: Sistema seguro de login para administradores
- Dashboard interativo: Interface moderna e responsiva em React
- Node.js com TypeScript
- Express.js - Framework web
- Sequelize - ORM para MySQL
- JWT - Autenticação segura
- bcrypt.js - Criptografia de senhas
- MySQL - Banco de dados relacional
- React - Biblioteca JavaScript
- React Router DOM - Navegação SPA
- Axios - Cliente HTTP
- CSS3 - Estilização
- Docker & Docker Compose - Containerização
- Jest - Testes unitários e de integração
- Mocha & Chai - Testes backend
- Puppeteer - Testes E2E
- ESLint - Linting de código
- Nyc - Cobertura de testes
- Docker e Docker Compose instalados
- Node.js (versão 16 ou superior)
- npm ou yarn
- Clone o repositório:
git clone https://github.com/Beto1821/TFC.git
cd TFC- Instale as dependências:
npm install- Suba os containers com Docker Compose:
npm run compose:upA aplicação estará disponível em:
- Frontend: http://localhost:3000
- Backend: http://localhost:3001
- Banco de dados: localhost:3002
# Subir aplicação em produção
npm run compose:up
# Derrubar containers
npm run compose:down
# Subir aplicação em modo desenvolvimento
npm run compose:up:dev
# Ver logs dos containers
npm run logs
# Executar testes
npm test
# Executar testes com navegador visível
npm run test:browser
# Executar testes em modo debug
npm run test:debugTFC/
├── app/
│ ├── backend/ # API REST em Node.js + TypeScript
│ │ ├── src/
│ │ │ ├── controllers/ # Controladores da aplicação
│ │ │ ├── services/ # Lógica de negócio
│ │ │ ├── middlewares/ # Middlewares de autenticação
│ │ │ ├── routes/ # Rotas da API
│ │ │ ├── database/ # Migrations, seeders e models
│ │ │ ├── interfaces/ # Interfaces TypeScript
│ │ │ └── tests/ # Testes unitários
│ │ └── Dockerfile
│ │
│ ├── frontend/ # Interface em React
│ │ ├── src/
│ │ │ ├── components/ # Componentes reutilizáveis
│ │ │ ├── pages/ # Páginas da aplicação
│ │ │ ├── services/ # Serviços de API
│ │ │ └── styles/ # Estilos CSS
│ │ └── Dockerfile
│ │
│ └── docker-compose.yml # Orquestração dos containers
│
└── __tests__/ # Testes E2E e de integração
- ✅ Visualizar todas as partidas (em andamento e finalizadas)
- ✅ Filtrar partidas por status
- ✅ Consultar tabela de classificação geral
- ✅ Consultar classificação de times mandantes
- ✅ Consultar classificação de times visitantes
- ✅ Login com email e senha
- ✅ Criar novas partidas
- ✅ Editar placar de partidas em andamento
- ✅ Finalizar partidas
O sistema utiliza JWT (JSON Web Token) para autenticação. As rotas administrativas requerem token válido no header:
Authorization: Bearer <seu-token-jwt>
O projeto possui cobertura completa de testes:
- Testes unitários no backend (Mocha + Chai + Sinon)
- Testes de integração da API
- Testes E2E com Puppeteer
- Cobertura de código com Nyc
Execute os testes:
npm testGET /teams- Lista todos os timesGET /teams/:id- Busca time por ID
GET /matches- Lista todas as partidasGET /matches?inProgress=true- Partidas em andamentoGET /matches?inProgress=false- Partidas finalizadasPOST /matches- Cria nova partida (autenticação necessária)PATCH /matches/:id- Atualiza placar (autenticação necessária)PATCH /matches/:id/finish- Finaliza partida (autenticação necessária)
GET /leaderboard- Classificação geralGET /leaderboard/home- Classificação mandantesGET /leaderboard/away- Classificação visitantes
POST /login- Realiza loginGET /login/role- Valida token e retorna role
O projeto utiliza três containers:
- frontend: Aplicação React (porta 3000)
- backend: API Node.js (porta 3001)
- db: Banco MySQL (porta 3002)
O backend utiliza as seguintes variáveis (já configuradas no docker-compose):
APP_PORT=3001
JWT_SECRET=jwt_secret
DB_USER=root
DB_PASS=123456
DB_HOST=db
DB_PORT=3306Desenvolvido por Beto1821
⚽ TFC - Trybe Futebol Clube - Gerenciamento completo de campeonatos de futebol