UNPKG

@accounter/server

Version:

149 lines • 5.4 kB
import { __decorate, __metadata, __param } from "tslib"; import DataLoader from 'dataloader'; import { CONTEXT, Inject, Injectable, Scope } from 'graphql-modules'; import { DBProvider } from '../../app-providers/db.provider.js'; import { sql } from '@pgtyped/runtime'; const getTransactionsByIds = sql ` SELECT * FROM accounter_schema.extended_transactions WHERE id IN $$transactionIds;`; const getTransactionsByChargeIds = sql ` SELECT * FROM accounter_schema.extended_transactions WHERE charge_id IN $$chargeIds ORDER BY event_date DESC;`; const getTransactionsByMissingRequiredInfo = sql ` SELECT * FROM accounter_schema.transactions WHERE business_id IS NULL;`; const getSimilarTransactions = sql ` SELECT * FROM accounter_schema.extended_transactions WHERE (CASE WHEN $withMissingInfo IS TRUE THEN business_id IS NULL ELSE TRUE END) AND ( (source_details IS NOT NULL AND source_details <> '' AND source_details = $details) OR (counter_account IS NOT NULL AND counter_account <> '' AND counter_account = $counterAccount) ) AND owner_id = $ownerId;`; const replaceTransactionsChargeId = sql ` UPDATE accounter_schema.transactions SET charge_id = $assertChargeID WHERE charge_id = $replaceChargeID RETURNING id; `; const updateTransaction = sql ` UPDATE accounter_schema.transactions SET account_id = COALESCE( $accountId, account_id, NULL ), charge_id = COALESCE( $chargeId, charge_id, NULL ), debit_date_override = COALESCE( $debitDate, debit_date_override, NULL ), business_id = COALESCE( $businessId, business_id, NULL ) WHERE id = $transactionId RETURNING *; `; const getTransactionsByFilters = sql ` SELECT t.* FROM accounter_schema.extended_transactions t WHERE ($isIDs = 0 OR t.id IN $$IDs) AND ($fromEventDate ::TEXT IS NULL OR t.event_date::TEXT::DATE >= date_trunc('day', $fromEventDate ::DATE)) AND ($toEventDate ::TEXT IS NULL OR t.event_date::TEXT::DATE <= date_trunc('day', $toEventDate ::DATE)) AND ($fromDebitDate ::TEXT IS NULL OR t.debit_date::TEXT::DATE >= date_trunc('day', $fromDebitDate ::DATE)) AND ($toDebitDate ::TEXT IS NULL OR t.debit_date::TEXT::DATE <= date_trunc('day', $toDebitDate ::DATE)) AND ($isBusinessIDs = 0 OR t.business_id IN $$businessIDs) AND ($isOwnerIDs = 0 OR t.owner_id IN $$ownerIDs) ORDER BY event_date DESC; `; let TransactionsProvider = class TransactionsProvider { context; dbProvider; adminBusinessId; constructor(context, dbProvider) { this.context = context; this.dbProvider = dbProvider; this.adminBusinessId = this.context.currentUser.userId; } async batchTransactionsByIds(ids) { const transactions = await getTransactionsByIds.run({ transactionIds: ids, }, this.dbProvider); return ids.map(id => transactions.find(charge => charge.id === id)); } getTransactionByIdLoader = new DataLoader((keys) => this.batchTransactionsByIds(keys), { cache: false }); async batchTransactionsByChargeIDs(chargeIds) { const transactions = await getTransactionsByChargeIds.run({ chargeIds, }, this.dbProvider); return chargeIds.map(id => transactions.filter(transaction => transaction.charge_id === id)); } getTransactionsByChargeIDLoader = new DataLoader((keys) => this.batchTransactionsByChargeIDs(keys), { cache: false, }); async getTransactionsByMissingRequiredInfo() { return getTransactionsByMissingRequiredInfo.run(undefined, this.dbProvider); } async getSimilarTransactions(params) { try { return getSimilarTransactions.run({ ...params, ownerId: this.adminBusinessId }, this.dbProvider); } catch (error) { console.error('Error fetching similar transactions:', error); throw new Error('Failed to fetch similar transactions'); } } async replaceTransactionsChargeId(params) { return replaceTransactionsChargeId.run(params, this.dbProvider); } updateTransaction(params) { return updateTransaction.run(params, this.dbProvider); } getTransactionsByFilters(params) { const isIDs = !!params?.IDs?.length; const isBusinessIDs = !!params?.businessIDs?.length; const isOwnerIDs = !!params?.ownerIDs?.length; const fullParams = { isIDs: isIDs ? 1 : 0, isBusinessIDs: isBusinessIDs ? 1 : 0, isOwnerIDs: isOwnerIDs ? 1 : 0, fromEventDate: null, toEventDate: null, fromDebitDate: null, toDebitDate: null, ...params, IDs: isIDs ? params.IDs : [null], businessIDs: isBusinessIDs ? params.businessIDs : [null], ownerIDs: isOwnerIDs ? params.ownerIDs : [null], }; return getTransactionsByFilters.run(fullParams, this.dbProvider); } }; TransactionsProvider = __decorate([ Injectable({ scope: Scope.Operation, global: true, }), __param(0, Inject(CONTEXT)), __metadata("design:paramtypes", [Object, DBProvider]) ], TransactionsProvider); export { TransactionsProvider }; //# sourceMappingURL=transactions.provider.js.map