feat: 完成前端业务闭环与后端联调
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { createRequestError } from './request-client.js'
|
||||
|
||||
const referralResponseError = (message) =>
|
||||
createRequestError(message, 'REFERRAL_RESPONSE_INVALID')
|
||||
|
||||
const normalizeReferralText = (value, field, { required = false } = {}) => {
|
||||
if (value === undefined || value === null) {
|
||||
if (required) throw referralResponseError(`推广关系响应缺少 ${field}`)
|
||||
return ''
|
||||
}
|
||||
if (typeof value !== 'string') throw referralResponseError(`推广关系响应 ${field} 无效`)
|
||||
const normalized = value.trim()
|
||||
if (required && !normalized) throw referralResponseError(`推广关系响应缺少 ${field}`)
|
||||
return normalized
|
||||
}
|
||||
|
||||
export const normalizeReferralProfile = (value) => {
|
||||
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
||||
throw referralResponseError('推广关系响应无效')
|
||||
}
|
||||
const referralCode = normalizeReferralText(value.referralCode, 'referralCode', { required: true })
|
||||
if (!/^[A-Za-z0-9_-]{4,64}$/.test(referralCode)) {
|
||||
throw referralResponseError('推广关系响应 referralCode 格式无效')
|
||||
}
|
||||
if (!Number.isSafeInteger(value.referredUserCount) || value.referredUserCount < 0) {
|
||||
throw referralResponseError('推广关系响应 referredUserCount 无效')
|
||||
}
|
||||
const shareUrl = normalizeReferralText(value.shareUrl, 'shareUrl', { required: true })
|
||||
if (!/^https:\/\/[^\s]+$/i.test(shareUrl)) {
|
||||
throw referralResponseError('推广关系响应 shareUrl 必须是 HTTPS 链接')
|
||||
}
|
||||
return {
|
||||
enabled: true,
|
||||
disabledReason: '',
|
||||
referralCode,
|
||||
referredUserCount: value.referredUserCount,
|
||||
shareTitle: normalizeReferralText(value.shareTitle, 'shareTitle', { required: true }),
|
||||
shareDescription: normalizeReferralText(value.shareText, 'shareText', { required: true }),
|
||||
shareUrl
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user