Uma API robusta construída com NestJS que inclui autenticação JWT, sistema de recuperação de senha e envio de emails.
- JWT Authentication: Login seguro com tokens JWT
- Password Hashing: Senhas criptografadas com bcryptjs
- Session Management: Gerenciamento de sessões de usuário
- Password Recovery: Envio de emails para recuperação de senha
- Email Templates: Templates HTML responsivos
- SMTP Configuration: Configuração flexível de servidores SMTP
- Forgot Password: Solicitação de recuperação de senha
- Reset Password: Redefinição de senha com token
- Email Sending: Sistema de envio de emails
src/
├── @types/ # Tipos TypeScript customizados
├── core/ # Core da aplicação
│ ├── docs/ # Documentação
│ ├── either/ # Pattern Either para tratamento de erros
│ ├── errors/ # Classes de erro customizadas
│ ├── helpers/ # Helpers e utilitários
│ │ └── cryptography/ # Criptografia e hashing
│ ├── repositories/ # Interfaces de repositório
│ └── types/ # Tipos compartilhados
├── domains/ # Domínios da aplicação
│ ├── accounts/ # Gerenciamento de contas
│ ├── sessions/ # Autenticação e sessões
│ └── open-routes/ # Rotas públicas
│ ├── dto/ # Data Transfer Objects
│ ├── repositories/ # Repositórios
│ ├── services/ # Lógica de negócio
│ └── utils/ # Utilitários
│ └── emails-template/ # Templates de email
├── infra/ # Infraestrutura
│ ├── auth/ # Autenticação JWT
│ ├── emails/ # Serviço de email
│ ├── http/ # Controllers e pipes
│ └── prisma/ # Configuração do Prisma
└── test/ # Testes
├── factories/ # Factories para testes
├── repositories/ # Repositórios em memória
└── provider/ # Providers mock
- NestJS: Framework Node.js para APIs
- Prisma: ORM moderno para banco de dados
- JWT: Autenticação com JSON Web Tokens
- bcryptjs: Criptografia de senhas
- nodemailer: Envio de emails
- class-validator: Validação de dados
- Swagger: Documentação da API
- Vitest: Framework de testes
npm install
Crie um arquivo .env
na raiz do projeto:
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/database"
# JWT
JWT_PRIVATE_KEY="your-jwt-private-key"
JWT_PUBLIC_KEY="your-jwt-public-key"
# Email Configuration
MAIL_HOST="smtp.gmail.com"
MAIL_PORT=587
MAIL_SECURITY=false
MAIL_USER="your-email@gmail.com"
MAIL_PASS="your-app-password"
MAIL_FROM="your-email@gmail.com"
# Frontend URL (for password reset links)
FRONTEND_URL="http://localhost:3000"
# Application
NODE_ENV="local"
PORT=3333
# Gerar migrations
npx prisma migrate dev
# Aplicar migrations
npx prisma migrate deploy
# Desenvolvimento
npm run start:dev
# Debug
npm run start:debug
# Produção
npm run start:prod
Login de usuário
{
"email": "user@example.com",
"password": "password123"
}
Resposta:
{
"access_token": "jwt-token",
"user": {
"id": "user-id",
"name": "User Name",
"email": "user@example.com",
"whatsapp": "5511999999999",
"avatar": "https://example.com/avatar.jpg",
"id_profile": "profile-id"
}
}
Solicitar recuperação de senha
{
"email": "user@example.com"
}
Resposta:
{
"message": "Password reset successfully"
}
Redefinir senha com token
{
"password": "newPassword123"
}
Resposta:
{
"message": "Password reset successfully"
}
Criar nova conta
{
"name": "User Name",
"email": "user@example.com",
"password": "password123",
"whatsapp": "5511999999999"
}
Resposta:
{
"id": "user-id",
"name": "User Name",
"email": "user@example.com",
"whatsapp": "5511999999999",
"avatar": null,
"id_profile": "profile-id",
"status": true
}
npm test
npm run test:watch
npm run test:e2e
npm run test:cov
- Tokens JWT para autenticação
- Refresh tokens para renovação automática
- Validação de tokens em rotas protegidas
- Senhas criptografadas com bcryptjs
- Salt rounds configuráveis
- Validação de força de senha
- Templates HTML seguros
- Validação de tokens de recuperação
- Expiração automática de tokens
O sistema suporta múltiplos provedores SMTP:
- Gmail: Configuração com App Passwords
- Outlook: Configuração com OAuth2
- Custom SMTP: Configuração manual
Templates HTML responsivos incluídos:
- Password Recovery: Template para recuperação de senha
- Welcome Email: Template de boas-vindas
- Custom Templates: Sistema extensível para novos templates
- Domains: Lógica de negócio isolada
- Infrastructure: Implementações técnicas
- Core: Utilitários e helpers compartilhados
- Interfaces para abstração de dados
- Implementações em memória para testes
- Implementações Prisma para produção
- Injeção de dependências com NestJS
- Providers configuráveis
- Testes isolados com mocks
# Build da imagem
docker build -t nestjs-api .
# Executar container
docker run -p 3333:3333 nestjs-api
# Executar com banco de dados
docker-compose up -d
# Desenvolvimento
npm run start:dev # Modo desenvolvimento com hot reload
npm run start:debug # Modo debug
# Build
npm run build # Compilar TypeScript
# Testes
npm test # Executar testes
npm run test:watch # Testes em modo watch
npm run test:e2e # Testes end-to-end
npm run test:cov # Cobertura de testes
# Linting
npm run lint # Executar ESLint
npm run format # Formatar código com Prettier
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature
) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature'
) - Push para a branch (
git push origin feature/AmazingFeature
) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE
para mais detalhes.
Para suporte, abra uma issue no repositório ou entre em contato através do email.
Desenvolvido com ❤️ usando NestJS