FAQ - Perguntas Frequentes¶
Respostas para as perguntas mais comuns sobre a integração.
Geral¶
Como a integração funciona?¶
- Nayax envia webhook com transação
- Sistema salva no banco e cria job
- Worker processa job assincronamente
- Dados são transformados (Nayax → Saipos)
- Pedido é enviado para API Saipos
É em tempo real?¶
Quase. O webhook é recebido instantaneamente, mas o processamento é assíncrono (acontece em segundos).
Posso usar em produção?¶
Sim! O sistema usa padrões confiáveis (Outbox Pattern, retry com backoff, DLQ).
Webhook¶
Como configurar o webhook no Nayax?¶
- Acesse painel administrativo Nayax
- Configure URL:
https://seu-dominio.com/webhooks/nayax - Método: POST
- Header:
Authorization: Bearer SEU_TOKEN
Como testar o webhook?¶
curl -X POST http://localhost:3000/webhooks/nayax \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"transactionKey": "test-'$(date +%s)'",
"transactionNumber": "TEST123",
"isTestTransaction": true,
"storeCode": "LOJA001",
"totalAmount": 10.00,
"items": [{"itemCode":"PROD001","itemName":"Teste","quantity":1,"price":10.00}],
"payments": [{"tenderType":1,"amount":10.00}]
}'
O webhook pode ser chamado várias vezes?¶
Sim, o sistema é idempotente. O mesmo transactionKey não cria pedidos duplicados (exceto em modo teste).
Jobs¶
Como ver jobs pendentes?¶
Ou no Prisma Studio:
Como reprocessar um job?¶
UPDATE "OutboxJob"
SET
status = 'PENDING',
"nextRunAt" = NOW(),
attempts = 0,
"lastError" = NULL
WHERE id = 'job_id';
O que significa cada status?¶
| Status | Significado |
|---|---|
PENDING | Aguardando processamento |
PROCESSING | Sendo processado agora |
SENT | Enviado com sucesso |
FAILED | Falhou, será retentado |
DLQ | Erro permanente, não retenta |
Quanto tempo leva para processar?¶
- Jobs
PENDING: processados a cada 20 segundos - Jobs
FAILED: retentados com backoff (30s, 2min, 5min, 15min, 30min, 60min)
Jobs em DLQ podem ser reprocessados?¶
Sim! Depois de corrigir o problema:
Autenticação¶
Quais métodos de autenticação são suportados?¶
- Bearer Token JWT - Para usuários
- Bearer Token Nayax - Para webhook Nayax
- Basic Auth - Email:senha em base64
- Credentials no Body - email + senha
Como gerar um JWT token?¶
curl -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"admin123"}'
Token JWT expira?¶
Sim, após 7 dias por padrão. Configure via JWT_EXPIRES_IN.
Saipos¶
Qual ambiente usar?¶
- Development/Staging:
https://homolog-order-api.saipos.com - Production:
https://order-api.saipos.com
Como obter credenciais Saipos?¶
Entre em contato com o suporte Saipos para obter: - idPartner - secret - cod_store
Erro "order_id já existe"?¶
Use isTestTransaction: true em testes. O sistema adiciona timestamp automaticamente.
Como mapear formas de pagamento?¶
O mapeamento é automático via tenderType:
| tenderType | Saipos |
|---|---|
| 1 | Dinheiro (DIN) |
| 50 | PIX (PARTNER_PAYMENT) |
| 16 | Visa (CRE) |
| 28 | Mastercard (CRE) |
Ver lista completa em nayax-to-saipos.mapper.ts.
Banco de Dados¶
Qual banco usar?¶
PostgreSQL 14+ é obrigatório (usa recursos específicos do Postgres).
Como fazer backup?¶
Como restaurar backup?¶
Posso usar outro ORM?¶
O projeto usa Prisma. Trocar requer refatoração significativa.
Performance¶
Quantos jobs posso processar?¶
O worker processa 20 jobs por vez a cada 20 segundos = ~60 jobs/minuto por instância.
Como aumentar throughput?¶
- Escalar horizontalmente (múltiplas instâncias)
- Aumentar lote de jobs processados
- Reduzir intervalo do cron
Jobs estão acumulando, o que fazer?¶
-- Ver queue depth
SELECT COUNT(*) FROM "OutboxJob" WHERE status = 'PENDING';
-- Se > 100, considerar escalar
Soluções: - Adicionar mais workers - Otimizar queries (adicionar índices) - Aumentar recursos (CPU/RAM)
Desenvolvimento¶
Como rodar localmente?¶
Como adicionar novo campo?¶
- Atualizar
schema.prisma - Criar migration:
npx prisma migrate dev - Atualizar mapper
- Atualizar DTOs
Como debugar?¶
# Logs detalhados
LOG_LEVEL=debug npm run start:dev
# Ver logs
tail -f logs/app.log | grep -E "ERROR|WARN"
Multi-tenant¶
Como adicionar novo restaurante?¶
INSERT INTO "Restaurant" (
id, name, slug,
"codeStoreNayax", "codeStoreSaipos",
"saiposIdPartner", "saiposSecret"
) VALUES (
gen_random_uuid(),
'Novo Restaurante',
'novo-restaurante',
'LOJA002',
'LOJA_SAIPOS_002',
'partner_id',
'secret'
);
Como vincular usuário a restaurante?¶
INSERT INTO "UserRestaurant" (id, "userId", "restaurantId", role)
VALUES (gen_random_uuid(), 'user_id', 'restaurant_id', 'MANAGER');
Quais roles existem?¶
| Role | Permissões |
|---|---|
| OWNER | Tudo |
| ADMIN | Gerencia usuários |
| MANAGER | Operações |
| EMPLOYEE | Básico |
| VIEWER | Leitura |
Erros Comuns¶
"Database connection failed"¶
Verificar DATABASE_URL no .env e se PostgreSQL está rodando.
"Port 3000 already in use"¶
"Prisma Client not generated"¶
"Migration failed"¶
Monitoramento¶
Como monitorar jobs?¶
-- Dashboard de status
SELECT
status,
COUNT(*) as count,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) as percentage
FROM "OutboxJob"
GROUP BY status;
Como ver taxa de sucesso?¶
SELECT
COUNT(*) FILTER (WHERE status = 'SENT') as success,
COUNT(*) FILTER (WHERE status IN ('FAILED', 'DLQ')) as failed,
ROUND(
COUNT(*) FILTER (WHERE status = 'SENT')::numeric /
COUNT(*)::numeric * 100,
2
) as success_rate
FROM "OutboxJob";
Como configurar alertas?¶
Use ferramentas como: - Sentry - Para erros - DataDog - Para métricas - PagerDuty - Para alertas
Deploy¶
Como fazer deploy?¶
# Build
npm ci --only=production
npm run build
# Migrations
npx prisma migrate deploy
# Start
pm2 start dist/main.js --name nayax-saipos
Como fazer rollback?¶
Preciso rodar migrations em produção?¶
Sim! Sempre rode npx prisma migrate deploy antes de iniciar a aplicação.
Segurança¶
Como alterar senha admin?¶
curl -X PATCH http://localhost:3000/users/me/password \
-H "Authorization: Bearer $JWT_TOKEN" \
-d '{"currentPassword":"admin123","newPassword":"nova_senha"}'
JWT_SECRET deve ser forte?¶
Sim! Gere com:
Devo commitar .env?¶
NUNCA! O .env já está no .gitignore.
Suporte¶
Onde encontrar ajuda?¶
- Troubleshooting
- Debug
- Slack: #nayax-saipos
- Email: suporte@example.com
Como reportar bug?¶
- Ver logs:
tail -f logs/app.log - Exportar dados do job/evento
- Criar issue no GitHub com logs
Posso contribuir?¶
Sim! Veja guia de contribuição no README.