33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
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)
|
||
})
|
||
)
|
||
}
|
||
}
|