fix(channels): sanitize card data and format suffixes

This commit is contained in:
2026-09-28 14:26:22 +08:00
parent 99d4a85ece
commit ea4a54f5c6
4 changed files with 51 additions and 25 deletions
+26 -11
View File
@@ -133,10 +133,16 @@ export async function createChannelAction(
return { success: false, error: "关联的部分账户不存在或已被删除" }
}
// 自动提取或补全卡号后4位
let suffix = val.cardNumberSuffix?.trim() || null
if (!suffix && val.cardNumberFull && val.cardNumberFull.length >= 4) {
suffix = val.cardNumberFull.slice(-4)
// 自动提取并清洗纯数字卡号及后4位
const cleanFull = val.cardNumberFull
? val.cardNumberFull.replace(/\D/g, "")
: ""
const cleanSuffix = val.cardNumberSuffix
? val.cardNumberSuffix.replace(/\D/g, "")
: ""
let suffix = cleanSuffix.slice(-4) || null
if (!suffix && cleanFull.length >= 4) {
suffix = cleanFull.slice(-4)
}
const [newChannel] = await db
@@ -151,8 +157,9 @@ export async function createChannelAction(
region: val.region ? val.region.toUpperCase().trim() : null,
issuerName: val.issuerName?.trim() || null,
cardType: val.cardType || null,
cardNumberFull: val.cardNumberFull?.trim() || null,
cardNumberSuffix: suffix,
cardNumberFull:
val.channelType === "PAYMENT_CARD" ? cleanFull || null : null,
cardNumberSuffix: val.channelType === "PAYMENT_CARD" ? suffix : null,
cardBrand: val.cardBrand?.trim() || null,
platform: val.platform?.trim() || null,
platformAccountId: val.platformAccountId?.trim() || null,
@@ -205,9 +212,16 @@ export async function updateChannelAction(
return { success: false, error: "关联的部分账户不存在或已被删除" }
}
let suffix = val.cardNumberSuffix?.trim() || null
if (!suffix && val.cardNumberFull && val.cardNumberFull.length >= 4) {
suffix = val.cardNumberFull.slice(-4)
// 自动提取并清洗纯数字卡号及后4位
const cleanFull = val.cardNumberFull
? val.cardNumberFull.replace(/\D/g, "")
: ""
const cleanSuffix = val.cardNumberSuffix
? val.cardNumberSuffix.replace(/\D/g, "")
: ""
let suffix = cleanSuffix.slice(-4) || null
if (!suffix && cleanFull.length >= 4) {
suffix = cleanFull.slice(-4)
}
const [updated] = await db
@@ -220,8 +234,9 @@ export async function updateChannelAction(
region: val.region ? val.region.toUpperCase().trim() : null,
issuerName: val.issuerName?.trim() || null,
cardType: val.cardType || null,
cardNumberFull: val.cardNumberFull?.trim() || null,
cardNumberSuffix: suffix,
cardNumberFull:
val.channelType === "PAYMENT_CARD" ? cleanFull || null : null,
cardNumberSuffix: val.channelType === "PAYMENT_CARD" ? suffix : null,
cardBrand: val.cardBrand?.trim() || null,
platform: val.platform?.trim() || null,
platformAccountId: val.platformAccountId?.trim() || null,