// ╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗╔═══════╗ // ╚══╗ ╔══╝║ ╔╗ ╔╗ ║║ ╔═══╗ ║║ ╔═══╗ ║║ ╔═══╗ ║╚══╗ ╔══╝║ ╔═════╝ // ║ ║ ║ ║║ ║║ ║║ ╚═══╝ ║║ ║ ║ ║║ ╚═══╝ ║ ║ ║ ║ ╚═════╗ // ║ ║ ║ ║║ ║║ ║║ ╔═════╝║ ║ ║ ║║ ╔═╗ ╔═╝ ║ ║ ╚═════╗ ║ // ╔══╝ ╚══╗║ ║║ ║║ ║║ ║ ║ ╚═══╝ ║║ ║ ║ ╚═╗ ║ ║ ╔═════╝ ║ // ╚═══════╝╚═╝╚═╝╚═╝╚═╝ ╚═══════╝╚═╝ ╚═══╝ ╚═╝ ╚═══════╝ import * as userValidators from '../../validators/user-validators.js'; import * as userTypings from '../../typings/user-typings.js'; import * as requestModule from '../../../request/request-module.js'; import * as utilityEngine from '@xyz.warpmatter.com/utility-engine'; // ╔═╗ ╔═╗╔═══════╗╔═╗ ╔═══════╗╔═══════╗╔═══════╗╔═══════╗ // ║ ║ ║ ║║ ╔═════╝║ ║ ║ ╔═══╗ ║║ ╔═════╝║ ╔═══╗ ║║ ╔═════╝ // ║ ╚═══╝ ║║ ╚═════╗║ ║ ║ ╚═══╝ ║║ ╚═════╗║ ╚═══╝ ║║ ╚═════╗ // ║ ╔═══╗ ║║ ╔═════╝║ ║ ║ ╔═════╝║ ╔═════╝║ ╔═╗ ╔═╝╚═════╗ ║ // ║ ║ ║ ║║ ╚═════╗║ ╚═════╗║ ║ ║ ╚═════╗║ ║ ║ ╚═╗╔═════╝ ║ // ╚═╝ ╚═╝╚═══════╝╚═══════╝╚═╝ ╚═══════╝╚═╝ ╚═══╝╚═══════╝ function instantiateNumberedArray(length = 0, startNumber = 0) { const numberedArray = Array.from(Array(length + startNumber).keys()); numberedArray.splice(0, startNumber); return numberedArray; } async function fetchUsersByPageNumber( pageNumber: number, requestContext: requestModule.RequestContext, ): Promise { if (utilityEngine.isNumber(pageNumber, 0)) { const response = await requestModule.sendRequest({ endpoint: `users?_offset=${pageNumber}`, }, requestContext); const jsonResponse = await response.json() as unknown; return utilityEngine.isObjectLiteral(jsonResponse) && utilityEngine.isFilledArray(jsonResponse?.['users']) ? jsonResponse['users'].filter(userValidators.isValidUser) : []; } return []; } // ╔═══════╗╔═══════╗ // ╚══╗ ╔══╝╚╗ ╔══╗ ║ // ║ ║ ║ ║ ║ ║ // ║ ║ ║ ║ ║ ║ // ╔══╝ ╚══╗╔╝ ╚══╝ ║ // ╚═══════╝╚═══════╝ export async function fetchUsersById( userId: string, requestContext: requestModule.RequestContext, ): Promise { userValidators.validateUserId(userId); const response = await requestModule.sendRequest({ endpoint: `users/${userId}`, }, requestContext); const jsonResponse = await response.json() as unknown; return userValidators.isValidUser(jsonResponse) ? jsonResponse : null; } // ╔═══════╗╔═╗ ╔═╗ // ║ ╔═══╗ ║║ ║ ║ ║ // ║ ╚═══╝ ║║ ║ ║ ║ // ║ ╔═══╗ ║║ ║ ║ ║ // ║ ║ ║ ║║ ╚═════╗║ ╚═════╗ // ╚═╝ ╚═╝╚═══════╝╚═══════╝ export async function fetchAllUsers( requestContext: requestModule.RequestContext, ): Promise { const response = await requestModule.sendRequest({ endpoint: `users`, }, requestContext); const jsonResponse = await response.json() as unknown; if (utilityEngine.isObjectLiteral(jsonResponse) && utilityEngine.isNumber(jsonResponse.limit, 0) && utilityEngine.isNumber(jsonResponse.totalItems, 0) ) { let users: userTypings.User[] = []; const pageSize = jsonResponse?.limit ?? 0; const itemCount = jsonResponse?.totalItems ?? 0; const pageCount = Math.ceil(itemCount / pageSize); const pageNumbers = instantiateNumberedArray(pageCount); for (const pageNumbersSegment of utilityEngine.segmentArray(pageNumbers, 8)) { console.time('test'); const responses = await Promise.all(pageNumbersSegment.map((pageNumber) => { return fetchUsersByPageNumber(pageNumber, requestContext); })); users = users.concat(responses.map((response) => response).flat()); console.log(users.length); console.timeEnd('test'); } return users; } return []; }