# 🔐 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

