优化发码回调,失败停止整个流程

This commit is contained in:
yml2213
2026-07-08 16:31:19 +08:00
parent 2a5080c6c4
commit 647f038061
11 changed files with 314 additions and 55 deletions
@@ -63,6 +63,11 @@ async function insertKuaishouIndustryVoucher(
consume_details_json,
consumed_at,
destroyed_at,
send_callback_status,
send_callback_attempt_count,
send_callback_last_error,
send_callback_response_json,
send_callback_sent_at,
raw_payload_json,
created_at,
updated_at
@@ -82,9 +87,14 @@ async function insertKuaishouIndustryVoucher(
$12::jsonb,
$13,
$14,
$15::jsonb,
$15,
$16,
$17
$17,
$18::jsonb,
$19,
$20::jsonb,
$21,
$22
)
ON CONFLICT (oid, unit_index) DO UPDATE
SET
@@ -100,6 +110,10 @@ async function insertKuaishouIndustryVoucher(
task_id = COALESCE(kuaishou_industry_vouchers.task_id, EXCLUDED.task_id),
valid_start_time = EXCLUDED.valid_start_time,
valid_end_time = EXCLUDED.valid_end_time,
send_callback_status = EXCLUDED.send_callback_status,
send_callback_last_error = EXCLUDED.send_callback_last_error,
send_callback_response_json = EXCLUDED.send_callback_response_json,
send_callback_sent_at = EXCLUDED.send_callback_sent_at,
raw_payload_json = EXCLUDED.raw_payload_json,
updated_at = EXCLUDED.updated_at
RETURNING *
@@ -119,6 +133,11 @@ async function insertKuaishouIndustryVoucher(
stringifyJson(input.consumeDetailsJson ?? []),
input.consumedAt || null,
input.destroyedAt || null,
input.sendCallbackStatus || 'success',
normalizeNonNegativeInteger(input.sendCallbackAttemptCount, 0),
input.sendCallbackLastError || '',
stringifyJson(input.sendCallbackResponseJson ?? {}),
input.sendCallbackSentAt || null,
stringifyJson(input.rawPayloadJson ?? {}),
input.createdAt,
input.updatedAt,
@@ -277,6 +296,33 @@ function normalizeVoucherPatchColumns(
columns.push({ column: 'destroyed_at', value: patch.destroyedAt || null })
}
if (patch.sendCallbackStatus !== undefined) {
columns.push({ column: 'send_callback_status', value: patch.sendCallbackStatus || 'success' })
}
if (patch.sendCallbackAttemptCount !== undefined) {
columns.push({
column: 'send_callback_attempt_count',
value: normalizeNonNegativeInteger(patch.sendCallbackAttemptCount, 0),
})
}
if (patch.sendCallbackLastError !== undefined) {
columns.push({ column: 'send_callback_last_error', value: patch.sendCallbackLastError || '' })
}
if (patch.sendCallbackResponseJson !== undefined) {
columns.push({
column: 'send_callback_response_json',
value: stringifyJson(patch.sendCallbackResponseJson ?? {}),
cast: '::jsonb',
})
}
if (patch.sendCallbackSentAt !== undefined) {
columns.push({ column: 'send_callback_sent_at', value: patch.sendCallbackSentAt || null })
}
if (patch.rawPayloadJson !== undefined) {
columns.push({
column: 'raw_payload_json',
@@ -337,6 +383,11 @@ function normalizeNullableId(value: unknown): number | null {
return Number.isFinite(parsed) && parsed > 0 ? parsed : null
}
function normalizeNonNegativeInteger(value: unknown, fallback: number) {
const parsed = Number(value)
return Number.isInteger(parsed) && parsed >= 0 ? parsed : fallback
}
function stringifyJson(value: unknown): string {
if (typeof value === 'string') {
return value