From df8a607da9212764a3f711d0a7ab0fbbab81e843 Mon Sep 17 00:00:00 2001 From: zhangnan Date: Thu, 24 Aug 2023 11:41:02 +0800 Subject: [PATCH] feat: filter token transfers by address hash --- .../api/v2/nft/transfers_controller.rb | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v2/nft/transfers_controller.rb b/app/controllers/api/v2/nft/transfers_controller.rb index ab05d6a37..2fa55a115 100644 --- a/app/controllers/api/v2/nft/transfers_controller.rb +++ b/app/controllers/api/v2/nft/transfers_controller.rb @@ -23,12 +23,23 @@ def index scope = TokenTransfer.all end - from = Address.find_by_address_hash(params[:from]) if params[:from] - to = Address.find_by_address_hash(params[:to]) if params[:to] - scope = scope.where(from: from) if from - scope = scope.where(to: to) if to - scope = scope.where(action: params[:transfer_action]) if params[:transfer_action] - scope = scope.includes(:ckb_transaction).where(ckb_transaction: { tx_hash: params[:tx_hash] }) if params[:tx_hash] + if params[:from] + scope = scope.where(from: find_address(params[:from])) + end + if params[:to] + scope = scope.where(to: find_address(params[:to])) + end + if params[:address_hash] + address = find_address(params[:address_hash]) + scope = scope.where(from: address).or(scope.where(to: address)) + end + if params[:transfer_action] + scope = scope.where(action: params[:transfer_action]) + end + if params[:tx_hash] + scope = scope.includes(:ckb_transaction).where(ckb_transaction: { tx_hash: params[:tx_hash] }) + end + scope = scope.order(transaction_id: :desc) pagy, token_transfers = pagy(scope) @@ -50,6 +61,12 @@ def download_csv send_data file, type: "text/csv; charset=utf-8; header=present", disposition: "attachment;filename=token_transfers.csv" end + + private + + def find_address(address_hash) + Address.find_by_address_hash(address_hash) + end end end end