Files
sub2api/frontend/src/utils/accountSelection.ts
T

46 lines
1.1 KiB
TypeScript

interface AccountIDRow {
id: number
}
interface AccountListPage {
items: AccountIDRow[]
total: number
pages?: number
}
type AccountPageFetcher = (
page: number,
pageSize: number,
filters: Record<string, unknown>
) => Promise<AccountListPage>
const SELECT_ALL_PAGE_SIZE = 1000
export async function fetchAllAccountIds(
fetchPage: AccountPageFetcher,
filters: Record<string, unknown>
): Promise<number[]> {
const requestFilters = {
...filters,
lite: '1',
include_scheduler_score: '0'
}
const firstPage = await fetchPage(1, SELECT_ALL_PAGE_SIZE, requestFilters)
const pageCount = Math.max(
firstPage.pages ?? 0,
Math.ceil(firstPage.total / SELECT_ALL_PAGE_SIZE)
)
const ids = firstPage.items.map(account => account.id)
for (let page = 2; page <= pageCount; page++) {
const result = await fetchPage(page, SELECT_ALL_PAGE_SIZE, requestFilters)
ids.push(...result.items.map(account => account.id))
}
const uniqueIDs = Array.from(new Set(ids))
if (uniqueIDs.length !== firstPage.total) {
throw new Error('账号列表结果不完整')
}
return uniqueIDs
}