Skip to main content
POST
/
streaks
/
groups
curl --request POST \
  --url 'https://backend.testeswaffle.org/streaks/groups' \
  --header 'Authorization: Bearer SEU_JWT_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "groupName": "Leitores do Escritório",
    "description": "Grupo da nossa equipe para competir nos streaks de leitura",
    "isPublic": false,
    "maxMembers": 20
  }'
{
  "success": true,
  "data": {
    "groupId": "abc123xyz0",
    "groupName": "Leitores do Escritório",
    "description": "Grupo da nossa equipe para competir nos streaks de leitura",
    "ownerEmail": "[email protected]",
    "isPublic": 0,
    "maxMembers": 20,
    "memberCount": 1,
    "createdAt": 1642680000,
    "updatedAt": 1642680000
  }
}

Descrição

Cria um novo grupo de amigos para competições privadas de streak. O usuário que cria o grupo automaticamente se torna o primeiro membro e pode convidar outros leitores.

Autenticação

Esta rota requer autenticação JWT. O usuário autenticado será definido como dono do grupo.

Request Body

groupName
string
required
Nome do grupo (máximo 100 caracteres)
description
string
Descrição opcional do grupo (máximo 500 caracteres)
isPublic
boolean
default:"false"
Se o grupo é público (qualquer um pode ver) ou privado (apenas membros)
maxMembers
number
default:"50"
Limite máximo de membros (máximo 200)

Response

success
boolean
Indica se a criação foi bem-sucedida
data
object
curl --request POST \
  --url 'https://backend.testeswaffle.org/streaks/groups' \
  --header 'Authorization: Bearer SEU_JWT_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "groupName": "Leitores do Escritório",
    "description": "Grupo da nossa equipe para competir nos streaks de leitura",
    "isPublic": false,
    "maxMembers": 20
  }'
{
  "success": true,
  "data": {
    "groupId": "abc123xyz0",
    "groupName": "Leitores do Escritório",
    "description": "Grupo da nossa equipe para competir nos streaks de leitura",
    "ownerEmail": "[email protected]",
    "isPublic": 0,
    "maxMembers": 20,
    "memberCount": 1,
    "createdAt": 1642680000,
    "updatedAt": 1642680000
  }
}

Regras de Negócio

Validações

  • Nome: Obrigatório, máximo 100 caracteres
  • Descrição: Opcional, máximo 500 caracteres
  • maxMembers: Entre 1 e 200 membros
  • Único por usuário: Um usuário pode criar múltiplos grupos

Comportamentos

  • Criador automaticamente vira primeiro membro
  • GroupId é gerado automaticamente (10 caracteres únicos)
  • Timestamps em Unix timestamp (segundos)
  • isPublic armazenado como integer (0/1) no banco

Limites

  • Grupos por usuário: Ilimitado
  • Membros por grupo: Configurável (padrão 50, máximo 200)
  • Nome do grupo: Único por usuário recomendado

Próximos Passos

Após criar o grupo, você pode:
  1. Adicionar membros: POST /streaks/groups/:groupId/members
  2. Ver ranking do grupo: GET /streaks/groups/:groupId/ranking
  3. Listar seus grupos: GET /streaks/groups

Notas de Implementação

ID Generation

  • Utiliza nanoid(10) para IDs únicos e seguros
  • IDs são URL-safe e legíveis

Database

  • Armazenado na tabela friendGroups
  • Índices em groupId e ownerEmail
  • Relacionamento com friendGroupMembers para membros

Authorizations

Authorization
string
header
required

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

Body

application/json
groupName
string
required

Nome do grupo

description
string

Descrição opcional do grupo

isPublic
boolean
default:false

Se o grupo é público

maxMembers
number
default:50

Limite máximo de membros

Response

200 - application/json

Grupo criado com sucesso

success
boolean
data
object