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
6.5 KiB
6.5 KiB
🔐 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
- Gestor faz login → Vai para
/onboarding - Clica em "Criar Workspace"
- Seleciona "Gestor (Mentor)"
- Informa email do funcionário
- Sistema:
- Cria o workspace
- Gera código de convite
- Exibe o código para compartilhar
- Gestor compartilha código com o funcionário
Cenário 2: Aceitar Convite como Funcionário
- Funcionário faz login → Vai para
/onboarding - Clica em "Tenho um código"
- Cola o código recebido
- Clica em "Aceitar Convite"
- 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:
-
users- Usuários do sistema- id, email, name, avatar, role, googleId
- createdAt, updatedAt, lastLoginAt
-
workspaces- Workspaces privados- id, slug, employeeId, managerId, hrId
- status, config, createdAt, updatedAt
-
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
// 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:
-
Email de Convite
- Integrar SendGrid ou Resend
- Template de email com código
- Link direto para aceitar
-
Dashboard do Workspace
- Diário de Atividades
- Metas e PDI
- Reuniões 1:1
- Testes Vocacionais
-
Permissões por Role
- Funcionário: visualizar, criar entradas
- Gestor: visualizar tudo, dar feedback
- RH: visualizar todos workspaces
-
Notificações
- Novo feedback
- Reunião agendada
- Meta atualizada
🧪 Como Testar
1. Configurar Google OAuth
Adicione no .env:
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
# 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
# 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