Transferir Créditos
Endpoint para transferência de créditos entre usuários. Permite que administradores, masters e revendedores transfiram créditos para outros usuários de sua hierarquia.
Autenticação
Bearer token JWT do usuário autenticado (ADMIN, MASTER ou RESALE)
Parâmetros
Request Body
ID do usuário que receberá os créditos
Quantidade de créditos a transferir
Responses
200 - Sucesso
400 - Saldo Insuficiente
403 - Sem Permissão
404 - Usuário Não Encontrado
400 - Valor Inválido
{
"message" : "Transferência realizada com sucesso"
}
Exemplo de Requisição
curl --location --request PATCH 'http://localhost:3333/user/credits-transfer' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' \
--header 'Content-Type: application/json' \
--data-raw '{
"receiver": "987e6543-e21b-12d3-a456-426614174000",
"credits": 50
}'
Regras de Negócio
Hierarquia de Permissões
A transferência de créditos segue uma hierarquia:
ADMIN : Pode transferir para qualquer usuário
MASTER : Pode transferir apenas para usuários de sua árvore
RESALE : Pode transferir apenas para seus clientes diretos
CUSTOMER : Não pode transferir créditos
Validações Automáticas
Saldo : Verifica se remetente possui créditos suficientes
Hierarquia : Valida se destinatário está na hierarquia do remetente
Valor : Quantidade deve ser maior que zero e número inteiro
Status : Ambos usuários devem estar ativos
Histórico e Auditoria
Todas as transferências são registradas automaticamente:
Timestamp : Data e hora da transferência
Remetente : Usuário que enviou os créditos
Destinatário : Usuário que recebeu os créditos
Quantidade : Valor transferido
Transferências de créditos são irreversíveis. Certifique-se de validar o destinatário e a quantidade antes de confirmar.
Transferência em Lote
Webhook/Notificação
Configure notificações para transferências:
// Enviar notificação após transferência
const notificarTransferencia = async ( transferData ) => {
// Notificar remetente
console . log ( `Você transferiu ${ transferData . transfer . amount } créditos para ${ transferData . receiver . name } ` );
// Notificar destinatário
// Implementar lógica de notificação (email, push, etc)
};
Para administradores, use o parâmetro owner para transferir créditos de outro usuário sem debitar do próprio saldo.
Próximos Passos
Implementar limite diário de transferências
Adicionar confirmação por e-mail para grandes valores
Criar relatório de transferências
Configurar alertas de saldo baixo