@accounter/server
Version:
The test suite is split into three Vitest projects for efficiency and isolation:
59 lines • 2.13 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import DataLoader from 'dataloader';
import { Injectable, Scope } from 'graphql-modules';
import { sql } from '@pgtyped/runtime';
import { getCacheInstance } from '../../../shared/helpers/index.js';
import { DBProvider } from '../../app-providers/db.provider.js';
const getEmployeesByEmployer = sql `
SELECT *
FROM accounter_schema.employees
WHERE employer in $$employerIDs;`;
const getEmployeesById = sql `
SELECT *
FROM accounter_schema.employees
WHERE business_id in $$employeeIDs;`;
let EmployeesProvider = class EmployeesProvider {
dbProvider;
cache = getCacheInstance({
stdTTL: 60 * 5,
});
constructor(dbProvider) {
this.dbProvider = dbProvider;
}
async batchEmployeesByEmployerIDs(employerIDs) {
if (employerIDs.length) {
return getEmployeesByEmployer
.run({ employerIDs }, this.dbProvider)
.then(res => employerIDs.map(employerId => res.filter(employee => employee.employer === employerId)));
}
return [];
}
getEmployeesByEmployerLoader = new DataLoader((employerIDs) => this.batchEmployeesByEmployerIDs(employerIDs), {
cacheKeyFn: key => `salary-employer-${key}`,
cacheMap: this.cache,
});
async batchEmployeesByIDs(employeeIDs) {
if (employeeIDs.length) {
return getEmployeesById
.run({ employeeIDs }, this.dbProvider)
.then(res => employeeIDs.map(employeeId => res.find(employee => employee.business_id === employeeId)));
}
return [];
}
getEmployeesByIdLoader = new DataLoader((employeeIDs) => this.batchEmployeesByIDs(employeeIDs), {
cacheKeyFn: key => `employee-${key}`,
cacheMap: this.cache,
});
clearCache() {
this.cache.clear();
}
};
EmployeesProvider = __decorate([
Injectable({
scope: Scope.Singleton,
global: true,
}),
__metadata("design:paramtypes", [DBProvider])
], EmployeesProvider);
export { EmployeesProvider };
//# sourceMappingURL=employees.provider.js.map