@accounter/server
Version:
Accounter GraphQL server
78 lines (68 loc) • 2.42 kB
JavaScript
export default {
name: '2025-01-30T11-50-54.max-transactions-trigger-fix.sql',
run: ({ sql }) => sql `
create or replace function accounter_schema.insert_max_creditcard_transaction_handler() returns trigger
language plpgsql
as
$$
DECLARE
merged_id UUID;
account_id_var UUID;
owner_id_var UUID;
charge_id_var UUID = NULL;
BEGIN
-- filter summarize records
-- Create merged raw transactions record:
INSERT INTO accounter_schema.transactions_raw_list (max_creditcard_id)
VALUES (NEW.id)
RETURNING id INTO merged_id;
-- get account and owner IDs
SELECT id, owner INTO account_id_var, owner_id_var
FROM accounter_schema.financial_accounts
WHERE account_number = NEW.short_card_number;
IF account_id_var IS NULL THEN
RAISE EXCEPTION 'No matching account found for card number: %', NEW.short_card_number;
END IF;
-- check if matching charge exists:
-- TBD
-- create new charge
IF (charge_id_var IS NULL) THEN
INSERT INTO accounter_schema.charges (owner_id)
VALUES (owner_id_var)
RETURNING id INTO charge_id_var;
END IF;
-- check if new record is fee
-- TBD
-- check if new record contains fees
-- TBD
IF NOT(NEW.original_currency = 'ILS') THEN
RAISE EXCEPTION 'Unknown currency: %', NEW.original_currency;
END IF;
IF (NEW.actual_payment_amount IS NULL) THEN
RAISE EXCEPTION 'Transaction amount cannot be null';
END IF;
-- create new transaction
INSERT INTO accounter_schema.transactions (account_id, charge_id, source_id, source_description, currency,
event_date, debit_date, amount, current_balance)
VALUES (account_id_var,
charge_id_var,
merged_id,
CONCAT_WS(' | ', NEW.merchant_name, NEW.comments),
CAST(
(
CASE
WHEN NEW.original_currency = 'ILS' THEN 'ILS'
-- use ILS as default:
ELSE 'ILS' END
) as accounter_schema.currency
),
NEW.purchase_date,
NEW.payment_date,
NEW.actual_payment_amount * -1,
0);
RETURN NEW;
END ;
$$;
`,
};
//# sourceMappingURL=2025-01-30T11-50-54.max-transactions-trigger-fix.js.map