diff --git a/src/services/api/logs.ts b/src/services/api/logs.ts index bf76961..ef4bf70 100644 --- a/src/services/api/logs.ts +++ b/src/services/api/logs.ts @@ -173,39 +173,36 @@ const fetchCompleteHomeLogs = async ( return firstPage; } - let nextOffset = firstOffset + records.length; const targetCount = Math.min(requestedLimit, Math.max(total - firstOffset, 0)); - while (records.length < targetCount && nextOffset < total) { - const remaining = targetCount - records.length; - const data = await apiClient.get('/logs', { - params: { - ...params, - limit: Math.min(pageLimit, remaining), - offset: nextOffset, - }, - timeout: LOGS_TIMEOUT_MS, - }); - - if (!isRecord(data) || !Array.isArray(data.logs)) { - break; - } - - const pageRecords = homeRecordsFromPayload(data); - if (pageRecords.length === 0) { - break; - } - - records.push(...pageRecords); - nextOffset += pageRecords.length; + if (records.length >= targetCount) { + return { ...firstPage, logs: records, limit: records.length, offset: firstOffset }; } - return { - ...firstPage, - logs: records, - limit: records.length, - offset: firstOffset, - }; + const remaining = targetCount - records.length; + const baseOffset = firstOffset + records.length; + const pageRequests: Array<{ offset: number; limit: number }> = []; + let collected = 0; + while (collected < remaining && baseOffset + collected < total) { + const pageSize = Math.min(pageLimit, remaining - collected); + pageRequests.push({ offset: baseOffset + collected, limit: pageSize }); + collected += pageSize; + } + + const pages = await Promise.all( + pageRequests.map(async ({ offset, limit }) => { + const data = await apiClient.get('/logs', { + params: { ...params, limit, offset }, + timeout: LOGS_TIMEOUT_MS, + }); + if (!isRecord(data) || !Array.isArray(data.logs)) return []; + return homeRecordsFromPayload(data); + }) + ); + + pages.forEach((pageRecords) => records.push(...pageRecords)); + + return { ...firstPage, logs: records, limit: records.length, offset: firstOffset }; }; export const logsApi = {