1# frozen_string_literal: true
2
3class Transaction
4 def self.sale(merchant_account, payment_method, amount)
5 BRAINTREE.transaction.sale(
6 amount: amount,
7 payment_method_token: payment_method.token,
8 merchant_account_id: merchant_account,
9 options: { submit_for_settlement: true }
10 ).then do |response|
11 raise response.message unless response.success?
12 new(response.transaction)
13 end
14 end
15
16 attr_reader :amount
17
18 def initialize(braintree_transaction)
19 @customer_id = braintree_transaction.customer_details.id
20 @transaction_id = braintree_transaction.id
21 @created_at = braintree_transaction.created_at
22 @amount = braintree_transaction.amount
23 end
24
25 def insert
26 params = [@customer_id, @transaction_id, @created_at, @amount]
27 DB.exec_defer(<<~SQL, params)
28 INSERT INTO transactions
29 (customer_id, transaction_id, created_at, amount)
30 VALUES
31 ($1, $2, $3, $4)
32 SQL
33 end
34end