Equipe e Permissões

Convidando um funcionário pra sua equipe

Como mandar convite por e-mail, reaproveitar convites ativos e revogar acesso.

Você convida gente pra equipe a partir do e-mail. O sistema gera um link único, manda por e-mail (se Resend estiver configurado) e a pessoa entra clicando no link.

Pré-requisitos

  • Permissão manage_team (administrador ou gestor).
  • E-mail válido do convidado.
  • Saber qual papel ele vai ter (administrador, gestor, atendente, tosador, banhista, veterinário, recepção). Veja papéis disponíveis.

Passo a passo

  1. Vá em /equipe.
  2. Clique em Convidar membro.
  3. Digite o e-mail (normalizado pra minúsculas).
  4. Escolha o papel.
  5. Envie.

[SCREENSHOT: Formulário de convite]

O que o PetShop Flow faz

  1. Valida e-mail e papel com Zod.
  2. Reaproveitamento: se já existe convite ativo (não usado, não revogado, não expirado) pro mesmo e-mail, devolve o link existente sinalizando reused: true.
  3. Senão, gera um token URL-safe de 43 caracteres e cria o convite com data de expiração.
  4. Tenta enviar por e-mail via Resend com o template de convite (assunto, HTML, texto).
  5. Se o e-mail não foi configurado, devolve o link copiável pra você mandar manual (ex.: pelo WhatsApp).

O lado do convidado

Quando ele clica no link /convite/<token>:

  1. Sistema valida o token (mínimo 16 caracteres) e aplica rate limit por token (3 tentativas a cada 5 min).
  2. Confere que o usuário está logado. Se não, manda pra login antes.
  3. Verifica que o convite existe, não foi usado, não foi revogado e não expirou.
  4. Confirma que a pet shop ainda existe.
  5. Verifica se o usuário já tem membership ativa nessa loja — se sim, recusa com "Você já faz parte dessa equipe."
  6. Cria ou ativa a membership com o papel definido no convite.
  7. Marca o convite como usado.
  8. Redireciona pra /dashboard.

Revogar convite ativo

Se você convidou e quer cancelar antes do uso:

  1. Vá em /equipe → Convites pendentes.
  2. Clique em Revogar no convite.
  3. O PetShop Flow marca revokedAt = now() — o link deixa de funcionar imediatamente.

Perguntas frequentes

O convite expira sozinho?

Sim. Por padrão tem prazo de expiração definido no banco (expiresAt). Depois de vencido, o link retorna "Este convite expirou."

Posso convidar pro mesmo e-mail várias vezes?

Pode, mas o PetShop Flow é idempotente: se já existe convite ativo, reutiliza o mesmo link em vez de criar outro. Isso evita confusão.

A pessoa não recebe o e-mail. O que faço?

Você ainda tem o link no painel. Copie e mande por WhatsApp. Se Resend não está configurado, todo convite vem assim por padrão.

Funcionário trocou de papel. Como atualizo?

Em /equipe, mude o papel direto — não precisa novo convite.