fix(finance): fix deletion notification order race condition by delegating local deletion to webhook (Rule 34)
This commit is contained in:
parent
d9756fe4d4
commit
bd972deda3
|
|
@ -49,6 +49,7 @@
|
||||||
- [x] **Migração do Módulo Financeiro para SQL (Fase 1 e 2):** Aba financeiro do Manager migrada para ler diretamente a tabela PostgreSQL `alunos_cobrancas` (via `currentPayments`).
|
- [x] **Migração do Módulo Financeiro para SQL (Fase 1 e 2):** Aba financeiro do Manager migrada para ler diretamente a tabela PostgreSQL `alunos_cobrancas` (via `currentPayments`).
|
||||||
- [x] **Parser Global de NUMERIC (Postgres):** Configurado o driver `pg` nos servidores do Manager e do Portal para converter automaticamente `NUMERIC`/`DECIMAL` (OID 1700) para `Number`, cumprindo as regras 19 e 32 do `GEMINI.md`.
|
- [x] **Parser Global de NUMERIC (Postgres):** Configurado o driver `pg` nos servidores do Manager e do Portal para converter automaticamente `NUMERIC`/`DECIMAL` (OID 1700) para `Number`, cumprindo as regras 19 e 32 do `GEMINI.md`.
|
||||||
- [x] **Resolução de Condição de Corrida:** Implementado `await` no update duplo de cobranças do SQL na edição de cobranças do Manager (`Finance.tsx`), assegurando consistência na re-busca de dados.
|
- [x] **Resolução de Condição de Corrida:** Implementado `await` no update duplo de cobranças do SQL na edição de cobranças do Manager (`Finance.tsx`), assegurando consistência na re-busca de dados.
|
||||||
|
- [x] **Ordem de Exclusão e Notificação (Regra 34):** Removida a exclusão local imediata no endpoint `/api/excluir_cobranca`. A remoção local é delegada ao webhook do Asaas, permitindo que a mensagem de WhatsApp acesse os dados necessários antes da deleção.
|
||||||
- [x] **Validação de Build e Git Push:** Confirmada compilação bem-sucedida do frontend/backend e efetuado o push para a branch remota `main` sob autorização do usuário.
|
- [x] **Validação de Build e Git Push:** Confirmada compilação bem-sucedida do frontend/backend e efetuado o push para a branch remota `main` sob autorização do usuário.
|
||||||
|
|
||||||
## 📋 Próximos Passos
|
## 📋 Próximos Passos
|
||||||
|
|
|
||||||
|
|
@ -1247,19 +1247,18 @@ app.post('/api/excluir_cobranca', async (req, res) => {
|
||||||
if (!isSinglePayment) {
|
if (!isSinglePayment) {
|
||||||
const asaasTargetId = formatInstallmentId(id);
|
const asaasTargetId = formatInstallmentId(id);
|
||||||
const resp = await fetch(`${ASAAS_BASE_URL}/v3/installments/${asaasTargetId}`, { method: 'DELETE', headers: { 'access_token': process.env.ASAAS_API_KEY } });
|
const resp = await fetch(`${ASAAS_BASE_URL}/v3/installments/${asaasTargetId}`, { method: 'DELETE', headers: { 'access_token': process.env.ASAAS_API_KEY } });
|
||||||
if (resp.ok) {
|
if (!resp.ok) { const e = await resp.json().catch(() => ({})); return res.status(400).json({ error: e.errors?.[0]?.description || 'Falha Asaas' }); }
|
||||||
addLog('Asaas', 'Exclusão Parcelamento OK', { id: asaasTargetId });
|
addLog('Asaas', 'Exclusão Parcelamento OK', { id: asaasTargetId });
|
||||||
}
|
// Deletar localmente apenas via webhook para não apagar antes de enviar o WhatsApp (Regra 34)
|
||||||
await pool.query('DELETE FROM alunos_cobrancas WHERE asaas_installment_id = $1', [asaasTargetId]);
|
|
||||||
} else {
|
} else {
|
||||||
const resp = await fetch(`${ASAAS_BASE_URL}/v3/payments/${id}`, { method: 'DELETE', headers: { 'access_token': process.env.ASAAS_API_KEY } });
|
const resp = await fetch(`${ASAAS_BASE_URL}/v3/payments/${id}`, { method: 'DELETE', headers: { 'access_token': process.env.ASAAS_API_KEY } });
|
||||||
if (!resp.ok) { const e = await resp.json().catch(() => ({})); return res.status(400).json({ error: e.errors?.[0]?.description || 'Falha Asaas' }); }
|
if (!resp.ok) { const e = await resp.json().catch(() => ({})); return res.status(400).json({ error: e.errors?.[0]?.description || 'Falha Asaas' }); }
|
||||||
|
|
||||||
addLog('Asaas', 'Exclusão Cobrança OK', { id });
|
addLog('Asaas', 'Exclusão Cobrança OK', { id });
|
||||||
await pool.query('DELETE FROM alunos_cobrancas WHERE asaas_payment_id = $1', [id]);
|
// Deletar localmente apenas via webhook para não apagar antes de enviar o WhatsApp (Regra 34)
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(200).json({ message: 'Excluído no Asaas e na base local' });
|
return res.status(200).json({ message: 'Exclusão solicitada ao Asaas. A remoção local ocorrerá via Webhook.' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('[Exclusão] Erro:', error);
|
console.error('[Exclusão] Erro:', error);
|
||||||
return res.status(500).json({ error: 'Erro interno.' });
|
return res.status(500).json({ error: 'Erro interno.' });
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue