65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
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<number, NormalizedCompanyRecord> => {
|
|
const allCompanies = new Collection<number, NormalizedCompanyRecord>();
|
|
|
|
for (const company of companies) {
|
|
allCompanies.set(company.id, company);
|
|
}
|
|
|
|
return allCompanies;
|
|
};
|
|
|
|
export const fetchAllCwCompanies = async (): Promise<
|
|
Collection<number, NormalizedCompanyRecord>
|
|
> => {
|
|
try {
|
|
console.log("[fetchAllCwCompanies] Attempting to fetch via collector...");
|
|
const collectorCompanies =
|
|
await runCollector<CollectorCompanyRecord[]>("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<number, NormalizedCompanyRecord>();
|
|
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;
|
|
};
|