UNPKG

@accounter/server

Version:

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

74 lines 3.16 kB
import { __decorate, __metadata } from "tslib"; import DataLoader from 'dataloader'; import { format } from 'date-fns'; 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 getReportByBusinessIdAndDates = sql ` SELECT * FROM accounter_schema.pcn874 WHERE business_id = $businessId AND month_date IN $$monthDates;`; const updateReport = sql ` UPDATE accounter_schema.pcn874 SET content = $content WHERE business_id = $businessId AND month_date = $monthDate RETURNING *;`; const insertReport = sql ` INSERT INTO accounter_schema.pcn874 (business_id, month_date, content) VALUES ($businessId, $monthDate, $content) RETURNING *;`; let VatReportProvider = class VatReportProvider { dbProvider; cache = getCacheInstance({ stdTTL: 60 * 60 * 5, }); constructor(dbProvider) { this.dbProvider = dbProvider; } async batchReportsByBusinessIdAndMonthDatesLoader(businessAndDates) { const businessIdsMap = new Map(); businessAndDates.map(([businessId, monthDate]) => { if (businessIdsMap.has(businessId)) { businessIdsMap.get(businessId)?.add(monthDate); } else { businessIdsMap.set(businessId, new Set([monthDate])); } }); const reports = (await Promise.all(Array.from(businessIdsMap.entries()).map(async ([businessId, monthDates]) => getReportByBusinessIdAndDates.run({ businessId, monthDates: Array.from(monthDates) }, this.dbProvider)))).flat(); return businessAndDates.map(([businessId, monthDate]) => reports.find(report => report.business_id === businessId && format(report.month_date, 'yyyy-MM-dd') === monthDate)?.content); } getReportByBusinessIdAndMonthDateLoader = new DataLoader((businessAndDates) => this.batchReportsByBusinessIdAndMonthDatesLoader(businessAndDates), { cacheKeyFn: ([businessId, monthDate]) => `pcn-${businessId}-${monthDate}`, cacheMap: this.cache, }); async updateReport(params) { if (params.businessId && params.monthDate) { await this.invalidateByBusinessIdAndMonth(params.businessId, format(params.monthDate, 'yyyy-MM-dd')); } return updateReport.run(params, this.dbProvider); } async insertReport(params) { if (params.businessId && params.monthDate) { await this.invalidateByBusinessIdAndMonth(params.businessId, format(params.monthDate, 'yyyy-MM-dd')); } return insertReport.run(params, this.dbProvider); } async invalidateByBusinessIdAndMonth(businessId, monthDate) { this.cache.delete(`pcn-${businessId}-${monthDate}`); } clearCache() { this.cache.clear(); } }; VatReportProvider = __decorate([ Injectable({ scope: Scope.Singleton, global: true, }), __metadata("design:paramtypes", [DBProvider]) ], VatReportProvider); export { VatReportProvider }; //# sourceMappingURL=vat-report.provider.js.map