UNPKG

@accounter/server

Version:

65 lines 2.31 kB
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