@accounter/server
Version:
58 lines • 1.99 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import DataLoader from 'dataloader';
import { Injectable, Scope } from 'graphql-modules';
import { DBProvider } from '../../app-providers/db.provider.js';
import { sql } from '@pgtyped/runtime';
import { getCacheInstance } from '../../../shared/helpers/index.js';
const getAllSortCodes = sql `
SELECT *
FROM accounter_schema.sort_codes`;
const getSortCodesByIds = sql `
SELECT sc.*
FROM accounter_schema.sort_codes sc
WHERE ($isSortCodesIds = 0 OR sc.key IN $$sortCodesIds);`;
let SortCodesProvider = class SortCodesProvider {
dbProvider;
cache = getCacheInstance({
stdTTL: 60 * 5,
});
constructor(dbProvider) {
this.dbProvider = dbProvider;
}
getAllSortCodes() {
const data = this.cache.get('all-sort-codes');
if (data) {
return Promise.resolve(data);
}
return getAllSortCodes.run(undefined, this.dbProvider).then(data => {
this.cache.set('all-sort-codes', data);
data.map(sortCode => {
this.cache.set(`sortcode-${sortCode.key}`, sortCode);
});
return data;
});
}
async batchSortCodesByIds(sortCodesIds) {
const ledgerRecords = await getSortCodesByIds.run({
isSortCodesIds: sortCodesIds.length > 0 ? 1 : 0,
sortCodesIds,
}, this.dbProvider);
return sortCodesIds.map(id => ledgerRecords.find(record => record.key === id));
}
getSortCodesByIdLoader = new DataLoader((keys) => this.batchSortCodesByIds(keys), {
cacheKeyFn: key => `sortcode-${key}`,
cacheMap: this.cache,
});
clearCache() {
this.cache.clear();
}
};
SortCodesProvider = __decorate([
Injectable({
scope: Scope.Singleton,
global: true,
}),
__metadata("design:paramtypes", [DBProvider])
], SortCodesProvider);
export { SortCodesProvider };
//# sourceMappingURL=sort-codes.provider.js.map