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

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

  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

// 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:

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