Skip to main content

Descrição

Adiciona novos membros a um grupo de amigos existente. Qualquer membro ativo do grupo pode convidar novos membros, não apenas o dono do grupo.

Autenticação

Esta rota requer autenticação JWT. O usuário deve ser membro ativo do grupo para poder adicionar novos membros.

Path Parameters

groupId
string
required
ID único do grupo onde os membros serão adicionados

Request Body

emails
array
required
Lista de emails dos usuários a serem adicionados ao grupo

Response

success
boolean
Indica se a operação foi bem-sucedida
message
string
Mensagem descritiva sobre o resultado da operação
curl --request POST \
  --url 'https://backend.testeswaffle.org/streaks/groups/abc123xyz0/members' \
  --header 'Authorization: Bearer SEU_JWT_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "emails": [
      "[email protected]",
      "[email protected]",
      "[email protected]"
    ]
  }'
{
  "success": true,
  "message": "Membros adicionados ao grupo Leitores do Escritório"
}

Regras de Negócio

Permissões

  • Qualquer membro pode adicionar novos membros (não apenas o dono)
  • Usuário deve ser membro ativo (isActive = 1)
  • Usuário deve existir no grupo

Validações

Lista de Emails

  • Array obrigatório e não-vazio
  • Emails devem ter formato válido
  • Duplicados são automaticamente ignorados

Limites do Grupo

  • Verifica limite de maxMembers do grupo
  • Conta membros ativos atuais + novos membros
  • Rejeita operação se exceder limite

Membros Existentes

  • Emails já presentes no grupo são ignorados silenciosamente
  • Não gera erro para membros duplicados
  • Log de debug registra tentativas de duplicação

Comportamentos

Processamento

  • Emails são convertidos para lowercase
  • Inserção individual com tratamento de erros
  • Operação continua mesmo se alguns emails falharem

Timestamps

  • addedByEmail: Email de quem fez o convite
  • joinedAt: Timestamp da adição
  • updatedAt do grupo é atualizado

Notificações

  • Sistema pode ser estendido para notificar novos membros
  • Logs de auditoria para rastreamento

Casos de Uso

Convite em Lote

// Adicionar múltiplos colegas de uma vez
const emails = [
  '[email protected]',
  '[email protected]',
  '[email protected]'
];

Tratamento de Erros

try {
  const response = await addMembers(groupId, emails);
  if (response.success) {
    showSuccess('Membros adicionados com sucesso!');
  }
} catch (error) {
  if (error.message.includes('Limite')) {
    showError('Grupo está no limite de membros');
  }
}

Verificação Prévia

// Verificar limites antes de adicionar
const group = await getGroupInfo(groupId);
const available = group.maxMembers - group.memberCount;
if (emails.length > available) {
  alert(`Só é possível adicionar ${available} membros`);
}

Limitações

Técnicas

  • Máximo de 50 emails por requisição (recomendado)
  • Timeout de 30 segundos para operações grandes
  • Rate limiting por usuário

Funcionais

  • Não verifica se emails existem no sistema
  • Usuários inexistentes aparecem no grupo mas sem streak
  • Sem sistema de confirmação/convite

Próximos Passos

Após adicionar membros:
  1. Verificar adição: GET /streaks/groups/:groupId/ranking
  2. Gerenciar membros: Implementar remoção se necessário
  3. Notificar: Comunicar novos membros por email/push

Notas de Implementação

Database

  • Tabela: friendGroupMembers
  • Índices: (groupId, memberEmail) único
  • Foreign key: groupIdfriendGroups.groupId

Performance

  • Operação em batch quando possível
  • Transações para consistência
  • Logs detalhados para debugging