import { Collection } from "@discordjs/collection"; import { connectWiseApi } from "../../constants"; import { runCollector } from "../collector-client/runCollector"; import { CollectorCompanyRecord, NormalizedCompanyRecord, } from "../../types/CompanySourceTypes"; import { normalizeCompanyRecords } from "./companyTranslation"; const toCompanyCollection = ( companies: NormalizedCompanyRecord[], ): Collection => { const allCompanies = new Collection(); for (const company of companies) { allCompanies.set(company.id, company); } return allCompanies; }; export const fetchAllCwCompanies = async (): Promise< Collection > => { try { console.log("[fetchAllCwCompanies] Attempting to fetch via collector..."); const collectorCompanies = await runCollector("fetchCompanies"); if (!Array.isArray(collectorCompanies)) { throw new Error("Collector payload was not an array"); } console.log( `[fetchAllCwCompanies] ✓ Successfully used collector data (${collectorCompanies.length} companies)`, ); return toCompanyCollection(normalizeCompanyRecords(collectorCompanies)); } catch (err) { console.error( `[fetchAllCwCompanies] ✗ Collector fetchCompanies failed, falling back to CW API:`, err instanceof Error ? { message: err.message, stack: err.stack } : err, ); } let allCompanies = new Collection(); const pageCount = 1000; const count = (await connectWiseApi.get("/company/companies/count")).data .count; const totalPages = Math.ceil(count / pageCount); for (let page = 0; page < totalPages; page++) { const response = await connectWiseApi.get( `/company/companies?page=${page + 1}&pageSize=${pageCount}`, ); const normalizedCompanies = normalizeCompanyRecords(response.data); for (const company of normalizedCompanies) { allCompanies.set(company.id, company); } } return allCompanies; };