UNPKG

@accounter/server

Version:

131 lines 4.45 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 getAllBusinessMatches = sql ` SELECT * FROM accounter_schema.businesses_green_invoice_match; `; const getBusinessesMatchesByIds = sql ` SELECT * FROM accounter_schema.businesses_green_invoice_match WHERE business_id IN $$businessIds; `; const getBusinessesMatchesByGreenInvoiceIds = sql ` SELECT * FROM accounter_schema.businesses_green_invoice_match WHERE green_invoice_id IN $$greenInvoiceBusinessIds; `; const updateBusinessMatch = sql ` UPDATE accounter_schema.businesses_green_invoice_match SET green_invoice_id = COALESCE( $greenInvoiceId, green_invoice_id, NULL ), remark = COALESCE( $remark, remark, NULL ), emails = COALESCE( $emails, emails, NULL ), business_id = COALESCE( $newBusinessId, business_id, NULL ) WHERE business_id = $businessId RETURNING *; `; const deleteBusinessMatch = sql ` DELETE FROM accounter_schema.businesses_green_invoice_match WHERE business_id = $businessId RETURNING business_id; `; const insertBusinessMatch = sql ` INSERT INTO accounter_schema.businesses_green_invoice_match (green_invoice_id) VALUES ($greenInvoiceId) RETURNING *;`; let BusinessesGreenInvoiceMatcherProvider = class BusinessesGreenInvoiceMatcherProvider { dbProvider; cache = getCacheInstance({ stdTTL: 60 * 60 * 24, // 24 hours }); constructor(dbProvider) { this.dbProvider = dbProvider; } async getAllBusinessMatches() { const cache = this.cache.get('all-business-matches'); if (cache) { return Promise.resolve(cache); } return getAllBusinessMatches.run(undefined, this.dbProvider).then(data => { this.cache.set('all-business-matches', data); data.map(businessMatch => { this.cache.set(`business-match-id-${businessMatch.business_id}`, businessMatch); this.cache.set(`business-match-green-invoice-id-${businessMatch.green_invoice_id}`, businessMatch); }); return data; }); } async batchBusinessesMatchByIds(ids) { try { const matches = await getBusinessesMatchesByIds.run({ businessIds: ids }, this.dbProvider); return ids.map(id => matches.find(match => match.business_id === id)); } catch (e) { console.error(e); return ids.map(() => undefined); } } getBusinessMatchByIdLoader = new DataLoader((keys) => this.batchBusinessesMatchByIds(keys), { cacheKeyFn: key => `business-match-id-${key}`, cacheMap: this.cache, }); async batchBusinessesMatchByGreenInvoiceIds(greenInvoiceIds) { try { const matches = await getBusinessesMatchesByGreenInvoiceIds.run({ greenInvoiceBusinessIds: greenInvoiceIds }, this.dbProvider); return greenInvoiceIds.map(id => matches.find(match => match.green_invoice_id === id)); } catch (e) { console.error(e); return greenInvoiceIds.map(() => undefined); } } getBusinessMatchByGreenInvoiceIdLoader = new DataLoader((keys) => this.batchBusinessesMatchByGreenInvoiceIds(keys), { cacheKeyFn: key => `business-match-green-invoice-id-${key}`, cacheMap: this.cache, }); async updateBusinessMatch(params) { this.clearCache(); return updateBusinessMatch.run(params, this.dbProvider); } async deleteBusinessMatch(businessId) { this.clearCache(); return deleteBusinessMatch.run({ businessId }, this.dbProvider); } async insertBusinessMatch(params) { this.clearCache(); return insertBusinessMatch.run(params, this.dbProvider); } clearCache() { this.cache.clear(); } }; BusinessesGreenInvoiceMatcherProvider = __decorate([ Injectable({ scope: Scope.Singleton, global: true, }), __metadata("design:paramtypes", [DBProvider]) ], BusinessesGreenInvoiceMatcherProvider); export { BusinessesGreenInvoiceMatcherProvider }; //# sourceMappingURL=businesses-green-invoice-match.provider.js.map