Files
PDI-MAKER/SISTEMA_AUTENTICACAO.md
Sergio Correa 0524656198 🚀 Initial commit - PDIMaker v1.0.0
Sistema completo de gestão de PDI com:
- Autenticação com email/senha e Google OAuth
- Workspaces privados isolados
- Sistema de convites com código único
- Interface profissional com Next.js 14
- Backend NestJS com PostgreSQL
- Docker com Nginx e SSL

Desenvolvido por Sergio Correa
2025-11-19 02:09:04 +00:00

258 lines
6.5 KiB
Markdown

# 🔐 Sistema de Autenticação e Workspaces - PDIMaker
## 📋 Visão Geral
Sistema completo de autenticação e gerenciamento de workspaces similar ao **mentorado.tech**, onde funcionários, gestores e RH compartilham um workspace privado e isolado.
---
## ✨ Funcionalidades Implementadas
### 1. **Autenticação com Google OAuth**
- ✅ Login social com Google
- ✅ Criação automática de usuário no primeiro login
- ✅ Sessão JWT segura
- ✅ Redirecionamento inteligente
### 2. **Sistema de Workspaces**
- ✅ Workspaces privados (1 Funcionário + 1 Gestor + 1 RH opcional)
- ✅ Slug único para cada workspace
- ✅ Isolamento completo entre workspaces
- ✅ Status de workspace (ACTIVE, PENDING_INVITE, ARCHIVED)
### 3. **Sistema de Convites**
- ✅ Geração de código único (24 caracteres)
- ✅ Convite por email
- ✅ Expiração automática (7 dias)
- ✅ Validação de acesso
### 4. **Fluxo de Onboarding**
- ✅ Página inicial para novos usuários
- ✅ Opção de aceitar convite
- ✅ Opção de criar novo workspace
- ✅ Redirecionamento automático
---
## 🚀 Fluxo de Uso
### **Cenário 1: Criar Workspace como Gestor**
1. Gestor faz login → Vai para `/onboarding`
2. Clica em "Criar Workspace"
3. Seleciona "Gestor (Mentor)"
4. Informa email do funcionário
5. Sistema:
- Cria o workspace
- Gera código de convite
- Exibe o código para compartilhar
6. Gestor compartilha código com o funcionário
### **Cenário 2: Aceitar Convite como Funcionário**
1. Funcionário faz login → Vai para `/onboarding`
2. Clica em "Tenho um código"
3. Cola o código recebido
4. Clica em "Aceitar Convite"
5. Sistema:
- Valida o código
- Ativa o workspace
- Redireciona para o workspace
---
## 📁 Estrutura de Arquivos Criados
```
frontend/
├── app/
│ ├── page.tsx # Home (redireciona)
│ ├── login/page.tsx # Página de login
│ ├── dashboard/page.tsx # Dashboard principal
│ ├── onboarding/page.tsx # Primeira vez do usuário
│ ├── workspaces/page.tsx # Lista de workspaces
│ ├── workspace/
│ │ ├── create/page.tsx # Criar workspace
│ │ └── [slug]/page.tsx # Workspace individual
│ └── api/
│ ├── workspaces/
│ │ └── create/route.ts # API criar workspace
│ └── invites/
│ └── accept/route.ts # API aceitar convite
├── lib/
│ ├── auth/
│ │ └── config.ts # Configuração NextAuth
│ ├── types/
│ │ └── next-auth.d.ts # Tipos TypeScript
│ └── utils/
│ └── invite-code.ts # Geração de códigos
└── middleware.ts # Proteção de rotas
```
---
## 🗄️ Banco de Dados
### **Tabelas Criadas:**
1. **`users`** - Usuários do sistema
- id, email, name, avatar, role, googleId
- createdAt, updatedAt, lastLoginAt
2. **`workspaces`** - Workspaces privados
- id, slug, employeeId, managerId, hrId
- status, config, createdAt, updatedAt
3. **`invites`** - Convites pendentes
- id, email, role, token, invitedBy
- workspaceId, status, expiresAt, acceptedAt
### **ENUMs:**
- Role: EMPLOYEE, MANAGER, HR_ADMIN
- WorkspaceStatus: ACTIVE, PENDING_INVITE, ARCHIVED
- InviteStatus: PENDING, ACCEPTED, EXPIRED, CANCELLED
---
## 🔒 Segurança
### **Middleware de Proteção**
```typescript
// Rotas públicas
["/", "/login", "/about", "/api/auth"]
// Rotas protegidas
Todas as outras (requerem autenticação)
// Verificação de workspace
/workspace/[slug] - Valida se usuário tem acesso
```
### **Validações**
- ✅ Token JWT seguro
- ✅ Verificação de email no convite
- ✅ Expiração de convites (7 dias)
- ✅ Status de convite (evita reuso)
- ✅ Isolamento de workspaces
---
## 🎨 Interface
### **Design Similar ao mentorado.tech:**
- Background corporativo
- Cards com glassmorphism
- Código de convite destacado
- Status visual (Mentor/Mentorado/RH)
- Cores por role:
- 🟣 Roxo: Funcionário/Mentorado
- 🟢 Verde: Gestor/Mentor
- 🟠 Laranja: RH
---
## 📝 Próximos Passos
### **Funcionalidades Adicionais:**
1. **Email de Convite**
- Integrar SendGrid ou Resend
- Template de email com código
- Link direto para aceitar
2. **Dashboard do Workspace**
- Diário de Atividades
- Metas e PDI
- Reuniões 1:1
- Testes Vocacionais
3. **Permissões por Role**
- Funcionário: visualizar, criar entradas
- Gestor: visualizar tudo, dar feedback
- RH: visualizar todos workspaces
4. **Notificações**
- Novo feedback
- Reunião agendada
- Meta atualizada
---
## 🧪 Como Testar
### **1. Configurar Google OAuth**
Adicione no `.env`:
```bash
GOOGLE_CLIENT_ID=seu_client_id
GOOGLE_CLIENT_SECRET=seu_client_secret
NEXTAUTH_SECRET=seu_secret_seguro
NEXTAUTH_URL=https://pdimaker.com.br
DATABASE_URL=postgresql://postgres:senha@postgres:5432/pdimaker_prod
```
### **2. Acessar a Aplicação**
```bash
# Acessar
https://pdimaker.com.br
# Fluxo:
1. Fazer login com Google
2. Vai para /onboarding
3. Escolher "Criar Workspace" ou "Tenho um código"
4. Criar workspace ou aceitar convite
5. Acessar workspace em /workspace/[slug]
```
### **3. Testar Convite**
```bash
# Usuário 1 (Gestor):
1. Login → Criar Workspace → Informar email do funcionário
2. Copiar código gerado: cmhrtjzk6001jox4z9dzb5al
3. Compartilhar com funcionário
# Usuário 2 (Funcionário):
1. Login → Tenho um código
2. Colar código: cmhrtjzk6001jox4z9dzb5al
3. Aceitar convite
4. Workspace ativo!
```
---
## 🐛 Troubleshooting
### **Erro: "Convite não encontrado"**
- Verificar se código está correto (24 caracteres)
- Verificar se convite não expirou (7 dias)
- Verificar no banco: `SELECT * FROM invites WHERE token = 'codigo';`
### **Erro: "Este convite não é para você"**
- Email do usuário logado deve ser o mesmo do convite
- Verificar: `SELECT email FROM invites WHERE token = 'codigo';`
### **Erro: Banco de dados**
- Verificar conexão: `docker exec pdimaker-db pg_isready`
- Verificar tabelas: `docker exec pdimaker-db psql -U postgres -d pdimaker_prod -c "\dt"`
---
## 📊 Estatísticas
- **Arquivos criados:** 15+
- **Linhas de código:** ~2000
- **Tabelas do banco:** 3 principais
- **Rotas API:** 2 principais
- **Páginas:** 6 principais
---
**Versão:** 1.0.0
**Data:** 19 de Novembro de 2025
**Status:** ✅ Pronto para uso