From 69b3afb8f7e29d2af8a05742e1ee20a85c563b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Wed, 14 Feb 2024 10:44:47 +0100 Subject: [PATCH] DRY up btcpay and lndhub services Removing initialize methods from the main/manager class also allows for different iniitalizers in specific task services --- .../fetch_lightning_wallet_balance.rb | 2 +- .../fetch_onchain_wallet_balance.rb | 2 +- app/services/btcpay_manager_service.rb | 34 +++++++++++++------ app/services/lndhub.rb | 26 ++++++++------ app/services/lndhub_v2.rb | 4 +-- 5 files changed, 43 insertions(+), 25 deletions(-) diff --git a/app/services/btcpay_manager/fetch_lightning_wallet_balance.rb b/app/services/btcpay_manager/fetch_lightning_wallet_balance.rb index 96bbf00..3685b58 100644 --- a/app/services/btcpay_manager/fetch_lightning_wallet_balance.rb +++ b/app/services/btcpay_manager/fetch_lightning_wallet_balance.rb @@ -1,7 +1,7 @@ module BtcpayManager class FetchLightningWalletBalance < BtcpayManagerService def call - res = get "stores/#{store_id}/lightning/BTC/balance" + res = get "/lightning/BTC/balance" { confirmed_balance: res["offchain"]["local"].to_i / 1000 # msats to sats diff --git a/app/services/btcpay_manager/fetch_onchain_wallet_balance.rb b/app/services/btcpay_manager/fetch_onchain_wallet_balance.rb index e28f197..fb1f0dc 100644 --- a/app/services/btcpay_manager/fetch_onchain_wallet_balance.rb +++ b/app/services/btcpay_manager/fetch_onchain_wallet_balance.rb @@ -1,7 +1,7 @@ module BtcpayManager class FetchOnchainWalletBalance < BtcpayManagerService def call - res = get "stores/#{store_id}/payment-methods/onchain/BTC/wallet" + res = get "/payment-methods/onchain/BTC/wallet" { balance: (res["balance"].to_f * 100000000).to_i, # BTC to sats diff --git a/app/services/btcpay_manager_service.rb b/app/services/btcpay_manager_service.rb index d8fbf09..b91e897 100644 --- a/app/services/btcpay_manager_service.rb +++ b/app/services/btcpay_manager_service.rb @@ -2,23 +2,35 @@ # API Docs: https://docs.btcpayserver.org/API/Greenfield/v1/ # class BtcpayManagerService < ApplicationService - attr_reader :base_url, :store_id, :auth_token - - def initialize - @base_url = Setting.btcpay_api_url - @store_id = Setting.btcpay_store_id - @auth_token = Setting.btcpay_auth_token - end - private - def get(endpoint) - res = Faraday.get("#{base_url}/#{endpoint}", {}, { + def base_url + @base_url ||= "#{Setting.btcpay_api_url}/stores/#{Setting.btcpay_store_id}" + end + + def auth_token + @auth_token ||= Setting.btcpay_auth_token + end + + def headers + { "Content-Type" => "application/json", "Accept" => "application/json", "Authorization" => "token #{auth_token}" - }) + } + end + def endpoint_url(path) + "#{base_url}/#{path.gsub(/^\//, '')}" + end + + def get(path) + res = Faraday.get endpoint_url(path), {}, headers + JSON.parse(res.body) + end + + def post(path, payload) + res = Faraday.post endpoint_url(path), payload.to_json, headers JSON.parse(res.body) end end diff --git a/app/services/lndhub.rb b/app/services/lndhub.rb index 44b7880..8fd9673 100644 --- a/app/services/lndhub.rb +++ b/app/services/lndhub.rb @@ -1,24 +1,20 @@ -class Lndhub +class Lndhub < ApplicationService attr_accessor :auth_token - def initialize - @base_url = ENV["LNDHUB_API_URL"] - end - - def post(endpoint, payload) + def post(path, payload) headers = { "Content-Type" => "application/json" } if auth_token headers.merge!({ "Authorization" => "Bearer #{auth_token}" }) end - res = Faraday.post "#{@base_url}/#{endpoint}", payload.to_json, headers + res = Faraday.post endpoint_url(path), payload.to_json, headers log_error(res) if res.status != 200 JSON.parse(res.body) end - def get(endpoint, auth_token) - res = Faraday.get("#{@base_url}/#{endpoint}", {}, { + def get(path, auth_token) + res = Faraday.get(endpoint_url(path), {}, { "Content-Type" => "application/json", "Accept" => "application/json", "Authorization" => "Bearer #{auth_token}" @@ -42,7 +38,7 @@ class Lndhub self.auth_token end - def balance(user_token=nil) + def fetch_balance(user_token=nil) get "balance", user_token || auth_token end @@ -72,4 +68,14 @@ class Lndhub Sentry.capture_message("Lndhub API request failed: #{res.body}") end end + + private + + def base_url + @base_url ||= Setting.lndhub_api_url + end + + def endpoint_url(path) + "#{base_url}/#{path.gsub(/^\//, '')}" + end end diff --git a/app/services/lndhub_v2.rb b/app/services/lndhub_v2.rb index b816fcb..c1298d9 100644 --- a/app/services/lndhub_v2.rb +++ b/app/services/lndhub_v2.rb @@ -1,13 +1,13 @@ class LndhubV2 < Lndhub - def post(endpoint, payload, options={}) + def post(path, payload, options={}) headers = { "Content-Type" => "application/json" } if auth_token headers.merge!({ "Authorization" => "Bearer #{auth_token}" }) elsif options[:admin_token] headers.merge!({ "Authorization" => "Bearer #{options[:admin_token]}" }) end - res = Faraday.post "#{@base_url}/#{endpoint}", payload.to_json, headers + res = Faraday.post endpoint_url(path), payload.to_json, headers log_error(res) if res.status != 200 JSON.parse(res.body)