UNPKG

@accounter/server

Version:

The test suite is split into three Vitest projects for efficiency and isolation:

59 lines 2.13 kB
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