Skip to main content
GET
/
streaks
/
groups
curl --request GET \
  --url 'https://backend.testeswaffle.org/streaks/groups' \
  --header 'Authorization: Bearer SEU_JWT_TOKEN'
{
  "success": true,
  "data": {
    "groups": [
      {
        "groupId": "abc123xyz0",
        "groupName": "Leitores do Escritório",
        "description": "Grupo da nossa equipe para competir nos streaks",
        "ownerEmail": "[email protected]",
        "isPublic": 0,
        "maxMembers": 20,
        "memberCount": 8,
        "isOwner": true,
        "createdAt": 1642680000,
        "joinedAt": 1642680000
      },
      {
        "groupId": "def456uvw1",
        "groupName": "Família Silva",
        "description": null,
        "ownerEmail": "[email protected]",
        "isPublic": 0,
        "maxMembers": 10,
        "memberCount": 4,
        "isOwner": false,
        "createdAt": 1642650000,
        "joinedAt": 1642680500
      },
      {
        "groupId": "ghi789rst2",
        "groupName": "Amigos da Faculdade",
        "description": "Grupo público dos ex-colegas de faculdade",
        "ownerEmail": "[email protected]",
        "isPublic": 1,
        "maxMembers": 50,
        "memberCount": 23,
        "isOwner": false,
        "createdAt": 1642600000,
        "joinedAt": 1642700000
      }
    ],
    "totalGroups": 3
  }
}

Descrição

Lista todos os grupos de amigos dos quais o usuário autenticado é membro. Retorna informações detalhadas sobre cada grupo, incluindo contagem de membros e status de proprietário.

Autenticação

Esta rota requer autenticação JWT. Retorna apenas grupos onde o usuário é membro ativo.

Response

success
boolean
Indica se a operação foi bem-sucedida
data
object
curl --request GET \
  --url 'https://backend.testeswaffle.org/streaks/groups' \
  --header 'Authorization: Bearer SEU_JWT_TOKEN'
{
  "success": true,
  "data": {
    "groups": [
      {
        "groupId": "abc123xyz0",
        "groupName": "Leitores do Escritório",
        "description": "Grupo da nossa equipe para competir nos streaks",
        "ownerEmail": "[email protected]",
        "isPublic": 0,
        "maxMembers": 20,
        "memberCount": 8,
        "isOwner": true,
        "createdAt": 1642680000,
        "joinedAt": 1642680000
      },
      {
        "groupId": "def456uvw1",
        "groupName": "Família Silva",
        "description": null,
        "ownerEmail": "[email protected]",
        "isPublic": 0,
        "maxMembers": 10,
        "memberCount": 4,
        "isOwner": false,
        "createdAt": 1642650000,
        "joinedAt": 1642680500
      },
      {
        "groupId": "ghi789rst2",
        "groupName": "Amigos da Faculdade",
        "description": "Grupo público dos ex-colegas de faculdade",
        "ownerEmail": "[email protected]",
        "isPublic": 1,
        "maxMembers": 50,
        "memberCount": 23,
        "isOwner": false,
        "createdAt": 1642600000,
        "joinedAt": 1642700000
      }
    ],
    "totalGroups": 3
  }
}

Características

Ordenação

  • Grupos ordenados por updatedAt decrescente
  • Grupos com atividade recente aparecem primeiro
  • Grupos criados recentemente têm prioridade

Informações Incluídas

Status do Usuário

  • isOwner: Indica se pode gerenciar o grupo
  • joinedAt: Quando o usuário entrou no grupo
  • Diferencia entre grupos próprios e grupos onde foi convidado

Métricas do Grupo

  • memberCount: Calculado em tempo real
  • maxMembers: Limite configurado pelo dono
  • isPublic: Visibilidade do grupo

Filtros Aplicados

  • Apenas grupos onde isActive = 1 (membro ativo)
  • Usuário deve estar presente na tabela friendGroupMembers
  • Grupos deletados ou arquivados não aparecem

Casos de Uso

Dashboard de Grupos

// Separar grupos próprios de grupos convidados
const ownGroups = data.groups.filter(g => g.isOwner);
const joinedGroups = data.groups.filter(g => !g.isOwner);

Verificar Limites

// Verificar se grupo está próximo do limite
const nearLimit = data.groups.filter(g => 
  g.memberCount / g.maxMembers > 0.8
);

Estatísticas

// Calcular estatísticas do usuário
const totalMembersInAllGroups = data.groups.reduce(
  (sum, group) => sum + group.memberCount, 0
);

Performance

Otimizações

  • Query com JOIN otimizado
  • Contagem de membros em lote
  • Índices em memberEmail e groupId

Límites

  • Não há limite de grupos por usuário
  • Response típico: 5-15 grupos por usuário
  • Tempo de resposta: ~100-300ms

Próximas Ações

Com a lista de grupos, você pode:
  1. Ver ranking: GET /streaks/groups/:groupId/ranking
  2. Adicionar membros: POST /streaks/groups/:groupId/members (se for dono)
  3. Gerenciar grupo: Operações baseadas em isOwner

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Response

200 - application/json

Lista de grupos obtida com sucesso

success
boolean
data
object