@accounter/server
Version:
65 lines • 2.31 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 getAdminBusinessesByIds = sql `
SELECT ab.*, f.name, b.vat_number
FROM accounter_schema.businesses_admin ab
INNER JOIN accounter_schema.businesses b
USING (id)
INNER JOIN accounter_schema.financial_entities f
USING (id)
WHERE ab.id IN $$ids;`;
const getAllAdminBusinesses = sql `
SELECT ab.*, f.name, b.vat_number
FROM accounter_schema.businesses_admin ab
INNER JOIN accounter_schema.businesses b
USING (id)
INNER JOIN accounter_schema.financial_entities f
USING (id)
INNER JOIN accounter_schema.financial_entities fe
USING (id);`;
let AdminBusinessesProvider = class AdminBusinessesProvider {
dbProvider;
cache = getCacheInstance({
stdTTL: 60 * 5,
});
constructor(dbProvider) {
this.dbProvider = dbProvider;
}
async batchAdminBusinessesByIds(ids) {
const uniqueIds = [...new Set(ids)];
const adminBusinesses = await getAdminBusinessesByIds.run({
ids: uniqueIds,
}, this.dbProvider);
return ids.map(id => adminBusinesses.find(admin => admin.id === id));
}
getAdminBusinessByIdLoader = new DataLoader((ids) => this.batchAdminBusinessesByIds(ids), {
cacheKeyFn: id => `admin-business-${id}`,
cacheMap: this.cache,
});
getAllAdminBusinesses() {
const data = this.cache.get('all-admin-businesses');
if (data) {
return Promise.resolve(data);
}
return getAllAdminBusinesses.run(undefined, this.dbProvider).then(result => {
this.cache.set('all-admin-businesses', result);
return result;
});
}
clearCache() {
this.cache.clear();
}
};
AdminBusinessesProvider = __decorate([
Injectable({
scope: Scope.Operation,
global: true,
}),
__metadata("design:paramtypes", [DBProvider])
], AdminBusinessesProvider);
export { AdminBusinessesProvider };
//# sourceMappingURL=admin-businesses.provider.js.map