This commit is contained in:
32
src/api/modules/packageSilenceValidation.ts
Normal file
32
src/api/modules/packageSilenceValidation.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { PackageManageService } from './packageManage'
|
||||
import {
|
||||
assertSilenceResponse,
|
||||
validateSilenceExpiryOverride
|
||||
} from '@/utils/business/packageSilence'
|
||||
|
||||
// 复用既有套餐详情,不假设授权候选已携带新字段;全部校验完成后才写。
|
||||
export async function ensurePackageSilenceOverrides(
|
||||
items: { packageId: number | undefined; override?: string | null }[]
|
||||
) {
|
||||
const checks = items.filter((item) => item.override && item.override !== 'default')
|
||||
const packages = new Map<
|
||||
number,
|
||||
Awaited<ReturnType<typeof PackageManageService.getPackageDetail>>['data']
|
||||
>()
|
||||
for (let index = 0; index < checks.length; index += 4) {
|
||||
await Promise.all(
|
||||
checks.slice(index, index + 4).map(async (item) => {
|
||||
if (!Number.isSafeInteger(item.packageId) || Number(item.packageId) < 1)
|
||||
throw new Error('缺少套餐 ID,无法校验生效条件')
|
||||
const id = item.packageId!
|
||||
let pkg = packages.get(id)
|
||||
if (!pkg) {
|
||||
const response = assertSilenceResponse(await PackageManageService.getPackageDetail(id))
|
||||
pkg = response.data
|
||||
packages.set(id, pkg)
|
||||
}
|
||||
validateSilenceExpiryOverride(pkg, item.override)
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user