@accounter/server
Version:
Accounter GraphQL server
84 lines • 2.91 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import DataLoader from 'dataloader';
import { Injectable, Scope } from 'graphql-modules';
import { sql } from '@pgtyped/runtime';
import { reassureOwnerIdExists } from '../../../shared/helpers/index.js';
import { AdminContextProvider } from '../../admin-context/providers/admin-context.provider.js';
import { TenantAwareDBClient } from '../../app-providers/tenant-db-client.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);`;
const insertSortCode = sql `
INSERT INTO accounter_schema.sort_codes (name, key, default_irs_code, owner_id)
VALUES ($name, $key, $defaultIrsCode, $ownerId)
RETURNING *;
`;
const updateSortCode = sql `
UPDATE accounter_schema.sort_codes
SET name = COALESCE(
$name,
name
),
default_irs_code = COALESCE(
$defaultIrsCode,
default_irs_code
)
WHERE key = $key
RETURNING *;
`;
let SortCodesProvider = class SortCodesProvider {
db;
adminContextProvider;
constructor(db, adminContextProvider) {
this.db = db;
this.adminContextProvider = adminContextProvider;
}
allSortCodesCache = null;
getAllSortCodes() {
if (this.allSortCodesCache) {
return this.allSortCodesCache;
}
this.allSortCodesCache = getAllSortCodes.run(undefined, this.db).then(data => {
data.map(sortCode => {
this.getSortCodesByIdLoader.prime(sortCode.key, sortCode);
});
return data;
});
return this.allSortCodesCache;
}
async batchSortCodesByIds(sortCodesIds) {
const ledgerRecords = await getSortCodesByIds.run({
isSortCodesIds: sortCodesIds.length > 0 ? 1 : 0,
sortCodesIds,
}, this.db);
return sortCodesIds.map(id => ledgerRecords.find(record => record.key === id));
}
getSortCodesByIdLoader = new DataLoader((keys) => this.batchSortCodesByIds(keys));
async addSortCode(params) {
this.clearCache();
const { ownerId } = await this.adminContextProvider.getVerifiedAdminContext();
return insertSortCode.run(reassureOwnerIdExists(params, ownerId), this.db);
}
async updateSortCode(params) {
this.clearCache();
return updateSortCode.run(params, this.db);
}
clearCache() {
this.getSortCodesByIdLoader.clearAll();
this.allSortCodesCache = null;
}
};
SortCodesProvider = __decorate([
Injectable({
scope: Scope.Operation,
global: true,
}),
__metadata("design:paramtypes", [TenantAwareDBClient,
AdminContextProvider])
], SortCodesProvider);
export { SortCodesProvider };
//# sourceMappingURL=sort-codes.provider.js.map