RT Sports Manager — a professional sports bankroll management platform, built with NestJS for scalable and secure backend development.
O RT Sports Manager é uma plataforma completa de gestão de bancas esportivas, focada em traders e apostadores profissionais. A aplicação foi construída com NestJS no backend, garantindo segurança, modularidade e escalabilidade.
Entre seus recursos estão:
- Gerenciamento de usuários e perfis
- Controle de bancas
- Estatísticas e predições esportivas
- Envio de e-mails transacionais
- Integração com API esportiva (Football)
- Autenticação JWT e confirmação de e-mail
- NestJS – Framework backend Node.js
- Prisma ORM – Gerenciamento do banco de dados
- PostgreSQL – Banco relacional robusto
- JWT – Autenticação segura
- Zod – Validação de DTOs e schemas
- TypeScript – Linguagem de desenvolvimento
- Jest – Testes automatizados
- Handlebars – Templates de e-mail
📦 rtsmanager_backend
├── 📜 README.md # Documentação do projeto
├── 📜 package.json # Dependências e scripts
├── 📜 tsconfig.json # Configuração do TypeScript
├── 📜 jest-e2e.json # Configuração de testes e2e
├── 📜 .env # Variáveis de ambiente (produção/desenvolvimento)
├── 📜 nest-cli.json # Configuração do Nest CLI
├── 📜 nodemon.json # Hot reload em dev
├── 📜 ecosystem.config.js # Arquivo de configuração do PM2
│
├── 📂 .github/workflows # Workflows do GitHub Actions (deploy automático)
│ └── deploy-master.yml
│
├── 📂 prisma # Configuração do Prisma ORM
│ ├── 📂 migrations # Histórico das migrations
│ └── schema.prisma # Definição do schema do banco de dados
│
├── 📂 src # Código-fonte principal da aplicação
│ ├── 📂 config # Configurações globais
│ │ └── prisma.config.ts
│
│ ├── 📂 libs # Bibliotecas reutilizáveis e infraestrutura
│ │ ├── 📂 common # Helpers, tipos, módulos e interfaces comuns
│ │ │ ├── crypto/ # Utilitários de criptografia
│ │ │ ├── database/ # Configuração e conexões do banco
│ │ ├── 📂 services # Serviços utilitários
│ │ │ ├── cache/ # Cache com TTL configurável
│ │ │ │ ├── cache.module.ts
│ │ │ │ └── cache.service.ts
│ │ │ ├── mailer/ # Serviço de e-mail com templates
│ │ │ │ ├── templates/ # Templates de e-mail (.hbs)
│ │ │ │ ├── mail.module.ts
│ │ │ │ └── mail.service.ts
│ │ │ └── notifications/ # Placeholder para notificações
│
│ ├── 📂 modules # Módulos principais do sistema
│ │ ├── 📂 auth # Autenticação (registro, login, e-mail)
│ │ │ ├── dto/ # DTOs de autenticação
│ │ │ ├── guards/ # Guards para autenticação e verificação de e-mail
│ │ │ ├── strategy/ # Estratégia JWT
│ │ │ ├── services/ # Serviços de auth (login, registro etc.)
│ │ │ ├── types/ # Tipagens auxiliares
│ │ │ ├── auth.controller.ts
│ │ │ ├── auth.module.ts
│ │ │ └── auth.service.ts
│ │
│ │ ├── 📂 users # Gestão de usuários
│ │ │ ├── controllers/ # Controller de avatar
│ │ │ ├── proxies/ # Proxy services para operações de usuário
│ │ │ ├── services/ # Serviços para manipulação de usuário
│ │ │ ├── test/ # Testes unitários de controller e service
│ │ │ ├── users.controller.ts
│ │ │ ├── users.module.ts
│ │ │ └── users.service.ts
│ │
│ │ ├── 📂 bankroll # Módulo de gestão de banca (bankrolls)
│ │ │ ├── services/ # Serviços de CRUD da banca
│ │ │ ├── z.dto/ # DTOs validados com Zod
│ │ │ ├── bankroll.controller.ts
│ │ │ └── bankroll.module.ts
│ │
│ │ ├── 📂 client-data # Dados complementares do cliente
│ │ │ ├── controllers/ # Controller de client-data
│ │ │ ├── dto/ # Schemas e DTOs
│ │ │ ├── services/ # CRUD dos dados do cliente
│ │ │ ├── tests/ # Testes unitários e e2e
│ │ │ ├── client-data.module.ts
│ │ │ └── client-data.service.ts
│ │
│ │ ├── 📂 events # Eventos do sistema
│ │ │ ├── dto/ # DTOs dos eventos
│ │ │ ├── events.controller.ts
│ │ │ └── events.service.ts
│ │
│ │ ├── 📂 predictions # Predições esportivas
│ │ ├── 📂 statistics # Estatísticas de partidas
│ │ ├── 📂 subscriptions # Módulo de assinaturas
│ │ ├── 📂 health # Health check da API
│ │ ├── 📂 image # Upload e manipulação de imagens
│
│ ├── 📂 shared # Tipos e declarações globais (custom.d.ts)
│ ├── 📂 api-sports # Integração com API-Sports
│ └── 📂 sports-radar # Integração com Sportradar (futuro)
│
│ └── main.ts # Ponto de entrada da aplicação Nest
│
├── 📂 uploads/avatars # Avatares dos usuários salvos localmente
├── 📂 test/ # Testes automatizados
│ ├── unit/ # Unitários
│ ├── integration/ # Integração (controller + service)
│ └── e2e/ # End-to-end
│
└── 📂 hetzner_server/ # Chaves SSH ou scripts de deploy VPS
---
## 🔒 Segurança e Autenticação
- **JWT** com suporte a `access` e `refresh token`
- **Guards personalizados**:
- `JwtAuthGuard`
- `VerifiedEmailGuard`
- Confirmação de e-mail com `token` e redirecionamento para o frontend
- Reset de senha por e-mail
---
## ✉️ Sistema de E-mails
Integração com SMTP (Gmail ou outro provedor), usando `@nestjs-modules/mailer` e templates `.hbs`:
- `email-confirmation.hbs`
- `forgot-password.hbs`
- `welcome.hbs`
Variáveis no `.env`:
```env
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USER=seu_email@gmail.com
MAIL_PASS=sua_senha
MAIL_FROM="RT Sports Manager <seu_email@gmail.com>"
FRONTEND_URL=http://localhost:3000
⚙️ Como Rodar o Projeto
1️⃣ Clone o repositório
bash
Copiar
Editar
git clone git@github.com:hltav/pgbsports_project.git
cd pgbsports_project
2️⃣ Instale as dependências
bash
Copiar
Editar
npm install
# ou
yarn install
3️⃣ Configure o .env
env
Copiar
Editar
DATABASE_URL=postgresql://user:senha@host:porta/banco
FRONTEND_URL=http://localhost:3000
JWT_SECRET=chave_secreta
JWT_EXPIRES_IN=1h
4️⃣ Execute as migrations do banco
bash
Copiar
Editar
npx prisma migrate dev
5️⃣ Suba a aplicação
bash
Copiar
Editar
npm run start:dev
# ou
yarn start:dev
✅ Rodando Testes
Unitários:
bash
Copiar
Editar
yarn test
Integração (E2E):
bash
Copiar
Editar
yarn test:e2e
🧠 Funcionalidades já implementadas
Autenticação e refresh token
Verificação de e-mail
Upload de avatar
Envio automático de e-mails
Criação e gerenciamento de bancas
Integração com API de esportes
Sistema de cache
Testes unitários e e2e
🤝 Contribuindo
Faça um fork
Crie uma branch: git checkout -b feature/nova-funcionalidade
Commit: git commit -m 'feat: nova funcionalidade'
Push: git push origin feature/nova-funcionalidade
Crie um Pull Request
📄 Licença
Este projeto está licenciado sob a MIT License — utilize livremente, com créditos.
Desenvolvido com 💙 por [Hudson Tavares](https://github.com/hltav)