From 5213e511503ebb93d861eeab3d50fe514040801e Mon Sep 17 00:00:00 2001 From: iamyates Date: Fri, 21 Apr 2023 12:13:39 +0800 Subject: [PATCH 01/23] added sort to address transactions --- app/controllers/api/v1/address_transactions_controller.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/address_transactions_controller.rb b/app/controllers/api/v1/address_transactions_controller.rb index fd41ea4d0..5cfed93d2 100644 --- a/app/controllers/api/v1/address_transactions_controller.rb +++ b/app/controllers/api/v1/address_transactions_controller.rb @@ -11,7 +11,12 @@ def show raise Api::V1::Exceptions::AddressNotFoundError if @address.is_a?(NullAddress) @tx_ids = AccountBook.where(address_id: @address.id).order("ckb_transaction_id" => :desc).select("ckb_transaction_id").page(@page).per(@page_size).fast_page - @ckb_transactions = CkbTransaction.tx_committed.where(id: @tx_ids.map(&:ckb_transaction_id)).select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at).order(id: :desc) + @ckb_transactions = CkbTransaction.tx_committed.where(id: @tx_ids.map(&:ckb_transaction_id)) + .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at, :capacity_involved) + asc_or_desc = params[:asc_or_desc] || 'desc' + @ckb_transactions = @ckb_transactions.order(id: asc_or_desc) if params[:sort_by].blank? || params[:sort_by] == 'time' + @ckb_transactions = @ckb_transactions.order(capacity_involved: asc_or_desc) if params[:send_volume] + @ckb_transactions = @ckb_transactions.order(capacity_involved: asc_or_desc) if params[:received_volume] json = Rails.cache.realize("#{@ckb_transactions.cache_key}/#{@address.query_address}", version: @ckb_transactions.cache_version) do @options = FastJsonapi::PaginationMetaGenerator.new(request: request, records: @ckb_transactions, page: @page, page_size: @page_size, records_counter: @tx_ids).call From 6c256469d26cb902bd0a5fc7c34b795b477767ea Mon Sep 17 00:00:00 2001 From: iamyates Date: Fri, 21 Apr 2023 15:23:29 +0800 Subject: [PATCH 02/23] added sort to block list --- .../api/v1/block_transactions_controller.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/block_transactions_controller.rb b/app/controllers/api/v1/block_transactions_controller.rb index b637a693c..6c1162a9b 100644 --- a/app/controllers/api/v1/block_transactions_controller.rb +++ b/app/controllers/api/v1/block_transactions_controller.rb @@ -6,13 +6,17 @@ class BlockTransactionsController < ApplicationController include Pagy::Backend def show block = Block.find_by!(block_hash: params[:id]) + temp_transactions = block.ckb_transactions + .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at) + .where(block_timestamp: block.timestamp) + temp_transactions = temp_transactions.where(tx_hash: params[:tx_hash]) if params[:tx_hash].present? + temp_transactions = temp_transactions.order(id: :desc) + @pagy, ckb_transactions = pagy( - block.ckb_transactions - .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at) - .where(block_timestamp: block.timestamp) - .order(:id), + temp_transactions, items: params[:page_size] || 10, - overflow: :empty_page) + overflow: :empty_page + ) json = Rails.cache.realize(ckb_transactions.cache_key, version: ckb_transactions.cache_version) do From 270d50907867ccc9adfdad9d43cf7d45c68689c2 Mon Sep 17 00:00:00 2001 From: iamyates Date: Fri, 21 Apr 2023 17:13:26 +0800 Subject: [PATCH 03/23] added index to blocks.reward --- db/migrate/20230422003834_add_index_to_blocks_reward.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20230422003834_add_index_to_blocks_reward.rb diff --git a/db/migrate/20230422003834_add_index_to_blocks_reward.rb b/db/migrate/20230422003834_add_index_to_blocks_reward.rb new file mode 100644 index 000000000..eac372a7c --- /dev/null +++ b/db/migrate/20230422003834_add_index_to_blocks_reward.rb @@ -0,0 +1,5 @@ +class AddIndexToBlocksReward < ActiveRecord::Migration[7.0] + def change + add_index :blocks, :reward + end +end From b8750e0ce529d63a4e2cc31105453ec0a73c7630 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 23 Apr 2023 10:10:56 +0800 Subject: [PATCH 04/23] added sort to transactions, added index --- app/controllers/api/v1/blocks_controller.rb | 9 ++++++++- app/controllers/api/v1/ckb_transactions_controller.rb | 11 ++++++++++- .../20230424004812_add_index_to_ckb_transactions.rb | 7 +++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20230424004812_add_index_to_ckb_transactions.rb diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index ff09ae532..788a16307 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -13,7 +13,14 @@ def index BlockListSerializer.new(blocks).serialized_json end else - blocks = Block.recent.select(:id, :miner_hash, :number, :timestamp, :reward, :ckb_transactions_count, :live_cell_changes, :updated_at).page(@page).per(@page_size).fast_page + blocks = Block.recent.select(:id, :miner_hash, :number, :timestamp, :reward, :ckb_transactions_count, :live_cell_changes, :updated_at) + asc_or_desc = params[:asc_or_desc] || 'desc' + order_by = params[:order_by] || 'number' + blocks = blocks.order(number: asc_or_desc) if params[:order_by] == 'number' + blocks = blocks.order(reward: asc_or_desc) if params[:order_by] == 'reward' + blocks = blocks.order(timestamp: asc_or_desc) if params[:order_by] == 'timestamp' + blocks = blocks.order(ckb_transactions_count: asc_or_desc) if params[:order_by] == 'ckb_transactions_count' + .page(@page).per(@page_size).fast_page json = Rails.cache.realize(blocks.cache_key, version: blocks.cache_version, race_condition_ttl: 3.seconds) do records_counter = RecordCounters::Blocks.new diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index da2f07ce3..943fb6838 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -19,7 +19,16 @@ def index else ckb_transactions = CkbTransaction.tx_committed.recent.normal.select( :id, :tx_hash, :block_number, :block_timestamp, :live_cell_changes, :capacity_involved, :updated_at - ).page(@page).per(@page_size).fast_page + ) + + asc_or_desc = params[:asc_or_desc] || 'desc' + order_by = params[:order_by] || 'number' + + ckb_transactions = ckb_transactions.order_by(block_number: asc_or_desc) if params[:order_by] == 'block_number' + ckb_transactions = ckb_transactions.order_by(block_timestamp: asc_or_desc) if params[:order_by] == 'block_timestamp' + ckb_transactions = ckb_transactions.order_by(transaction_fee: asc_or_desc) if params[:order_by] == 'transaction_fee' + ckb_transactions = ckb_transactions.page(@page).per(@page_size).fast_page + json = Rails.cache.realize(ckb_transactions.cache_key, version: ckb_transactions.cache_version, race_condition_ttl: 3.seconds) do diff --git a/db/migrate/20230424004812_add_index_to_ckb_transactions.rb b/db/migrate/20230424004812_add_index_to_ckb_transactions.rb new file mode 100644 index 000000000..389eccded --- /dev/null +++ b/db/migrate/20230424004812_add_index_to_ckb_transactions.rb @@ -0,0 +1,7 @@ +class AddIndexToCkbTransactions < ActiveRecord::Migration[7.0] + def change + add_index :ckb_transactions, :block_number + add_index :ckb_transactions, :block_timestamp + add_index :ckb_transactions, :transaction_fee + end +end From 99a5e99f08860407069f29069cf899cfa453ec5f Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 23 Apr 2023 12:00:06 +0800 Subject: [PATCH 05/23] added sort to pending transactions --- app/controllers/api/v1/ckb_transactions_controller.rb | 2 +- .../api/v2/pending_transactions_controller.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index 943fb6838..02dbd2ddf 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -22,7 +22,7 @@ def index ) asc_or_desc = params[:asc_or_desc] || 'desc' - order_by = params[:order_by] || 'number' + order_by = params[:order_by] || 'block_number' ckb_transactions = ckb_transactions.order_by(block_number: asc_or_desc) if params[:order_by] == 'block_number' ckb_transactions = ckb_transactions.order_by(block_timestamp: asc_or_desc) if params[:order_by] == 'block_timestamp' diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index ccfe6956e..5e28a0613 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -2,7 +2,14 @@ module Api::V2 class PendingTransactionsController < BaseController before_action :set_page_and_page_size def index - pending_transactions = PoolTransactionEntry.pool_transaction_pending.order('id desc').page(@page).per(@page_size).fast_page + pending_transactions = PoolTransactionEntry.pool_transaction_pending. + + asc_or_desc = params[:asc_or_desc] || 'desc' + order_by = params[:order_by] || 'id' + head :not_found and return unless order_by.in? %w[id, created_at, transaction_fee ] + + pending_transactions.order(order_by: asc_or_desc) + pending_transactions = pending_transactions.page(@page).per(@page_size).fast_page head :not_found and return if pending_transactions.blank? render json: { From d7dc894918ab4e0c8e2b797ce571b8761eed7f09 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 23 Apr 2023 15:25:06 +0800 Subject: [PATCH 06/23] added sort to udts --- app/controllers/api/v1/udts_controller.rb | 10 +++++++++- .../api/v2/pending_transactions_controller.rb | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/v1/udts_controller.rb b/app/controllers/api/v1/udts_controller.rb index 7d88e03aa..29bea9359 100644 --- a/app/controllers/api/v1/udts_controller.rb +++ b/app/controllers/api/v1/udts_controller.rb @@ -4,7 +4,15 @@ class Api::V1::UdtsController < ApplicationController before_action :validate_pagination_params, :pagination_params, only: :index def index - udts = Udt.sudt.order(addresses_count: :desc, id: :asc).page(@page).per(@page_size).fast_page + udts = Udt.sudt + + asc_or_desc = params[:asc_or_desc] || 'desc' + order_by = params[:order_by] || 'id' + head :not_found and return unless order_by.in? %w[id addresses_count block_timestamp] + + udts = udts.order(params[:order_by]: order_by) + .page(@page).per(@page_size).fast_page + options = FastJsonapi::PaginationMetaGenerator.new(request: request, records: udts, page: @page, page_size: @page_size).call render json: UdtSerializer.new(udts, options) end diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index 5e28a0613..3653ac48d 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -8,8 +8,8 @@ def index order_by = params[:order_by] || 'id' head :not_found and return unless order_by.in? %w[id, created_at, transaction_fee ] - pending_transactions.order(order_by: asc_or_desc) - pending_transactions = pending_transactions.page(@page).per(@page_size).fast_page + pending_transactions = pending_transactions.order(order_by: asc_or_desc) + .page(@page).per(@page_size).fast_page head :not_found and return if pending_transactions.blank? render json: { From 0918d8ace50d8add7a356bdf6b2c58cf5d7750c9 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 23 Apr 2023 17:05:11 +0800 Subject: [PATCH 07/23] added sort to nfts ( token_collections ) and filter --- .../api/v2/nft/collections_controller.rb | 16 +++++++++++++--- ...31_add_index_to_token_collections_standard.rb | 5 +++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20230424012931_add_index_to_token_collections_standard.rb diff --git a/app/controllers/api/v2/nft/collections_controller.rb b/app/controllers/api/v2/nft/collections_controller.rb index cadc93a24..b9830e412 100644 --- a/app/controllers/api/v2/nft/collections_controller.rb +++ b/app/controllers/api/v2/nft/collections_controller.rb @@ -2,10 +2,20 @@ module Api module V2 class NFT::CollectionsController < BaseController def index - pagy, collections = pagy(TokenCollection.order(id: :desc)) + asc_or_desc = params[:asc_or_desc] || 'desc' + order_by = params[:order_by] || 'id' + head :not_found and return unless order_by.in? %w[id holders_count items_count] + + collections = TokenCollection + collections = collections.where(standard: params[:type]) if params[:type].present? + collections = collections + .order(params[:order_by]: order_by) + .page(@page).per(@page_size).fast_page + + @pagy, @collections = pagy(collections).fast_page render json: { - data: collections, - pagination: pagy_metadata(pagy) + data: @collections, + pagination: pagy_metadata(@pagy) } end diff --git a/db/migrate/20230424012931_add_index_to_token_collections_standard.rb b/db/migrate/20230424012931_add_index_to_token_collections_standard.rb new file mode 100644 index 000000000..35ff89fb7 --- /dev/null +++ b/db/migrate/20230424012931_add_index_to_token_collections_standard.rb @@ -0,0 +1,5 @@ +class AddIndexToTokenCollectionsStandard < ActiveRecord::Migration[7.0] + def change + add_index :token_collections, :standard + end +end From 6a48ccc4d6e774aafdd5856b554a4b9b0b30d9b3 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 23 Apr 2023 18:03:51 +0800 Subject: [PATCH 08/23] added filter to udt_transactions --- app/controllers/api/v1/udt_transactions_controller.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/udt_transactions_controller.rb b/app/controllers/api/v1/udt_transactions_controller.rb index 480ce56f5..9fef60888 100644 --- a/app/controllers/api/v1/udt_transactions_controller.rb +++ b/app/controllers/api/v1/udt_transactions_controller.rb @@ -6,7 +6,14 @@ class UdtTransactionsController < ApplicationController def show udt = Udt.find_by!(type_hash: params[:id], published: true) - ckb_transactions = udt.ckb_transactions.tx_committed.select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at).recent.page(@page).per(@page_size).fast_page + ckb_transactions = udt.ckb_transactions.tx_committed + .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at).recent + + # TODO minted? burn? transfer? + ckb_transactions = ckb_transactions.where(tx_hash: params[:tx_hash]) if params[:tx_hash].present? + ckb_transactions = ckb_transactions + .page(@page).per(@page_size).fast_page + json = Rails.cache.realize("#{udt.symbol}/#{ckb_transactions.cache_key}", version: ckb_transactions.cache_version) do records_counter = RecordCounters::UdtTransactions.new(udt) From 276d8f2c8e29c4950c70ee38ba5acfb162af321d Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 23 Apr 2023 19:22:59 +0800 Subject: [PATCH 09/23] added filter to dao transactions --- app/controllers/api/v1/contract_transactions_controller.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/contract_transactions_controller.rb b/app/controllers/api/v1/contract_transactions_controller.rb index 7ab69e7e3..bfb079dec 100644 --- a/app/controllers/api/v1/contract_transactions_controller.rb +++ b/app/controllers/api/v1/contract_transactions_controller.rb @@ -7,7 +7,12 @@ def show raise Api::V1::Exceptions::ContractNotFoundError if params[:id] != DaoContract::CONTRACT_NAME dao_contract = DaoContract.default_contract - ckb_transactions = dao_contract.ckb_transactions.includes(:cell_inputs, :cell_outputs).tx_committed.select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at).recent.page(@page).per(@page_size).fast_page + ckb_transactions = dao_contract.ckb_transactions.includes(:cell_inputs, :cell_outputs).tx_committed + .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at).recent + + ckb_transactions = ckb_transactions.where(tx_hash: params[:tx_hash]) if params[:tx_hash].present? + ckb_transactions = ckb_transactions + .page(@page).per(@page_size).fast_page json = Rails.cache.realize(ckb_transactions.cache_key, version: ckb_transactions.cache_version) do records_counter = RecordCounters::DaoTransactions.new(dao_contract) From d4f522a0a4cd948fd44fdb7fe667ffe03ad04d60 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 7 May 2023 10:52:38 +0800 Subject: [PATCH 10/23] fixed filter bug for blocks, udts, pending tx --- app/controllers/api/v1/blocks_controller.rb | 8 +++----- app/controllers/api/v1/udts_controller.rb | 2 +- .../api/v2/pending_transactions_controller.rb | 11 +++++------ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index 788a16307..f2c64de9e 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -16,11 +16,9 @@ def index blocks = Block.recent.select(:id, :miner_hash, :number, :timestamp, :reward, :ckb_transactions_count, :live_cell_changes, :updated_at) asc_or_desc = params[:asc_or_desc] || 'desc' order_by = params[:order_by] || 'number' - blocks = blocks.order(number: asc_or_desc) if params[:order_by] == 'number' - blocks = blocks.order(reward: asc_or_desc) if params[:order_by] == 'reward' - blocks = blocks.order(timestamp: asc_or_desc) if params[:order_by] == 'timestamp' - blocks = blocks.order(ckb_transactions_count: asc_or_desc) if params[:order_by] == 'ckb_transactions_count' - .page(@page).per(@page_size).fast_page + + head :not_found and return unless order_by.in? %w[number reward timestamp ckb_transactions_count] + blocks = blocks.order(Arel.sql("#{order_by} #{asc_or_desc}")).page(@page).per(@page_size).fast_page json = Rails.cache.realize(blocks.cache_key, version: blocks.cache_version, race_condition_ttl: 3.seconds) do records_counter = RecordCounters::Blocks.new diff --git a/app/controllers/api/v1/udts_controller.rb b/app/controllers/api/v1/udts_controller.rb index 29bea9359..832e34b66 100644 --- a/app/controllers/api/v1/udts_controller.rb +++ b/app/controllers/api/v1/udts_controller.rb @@ -10,7 +10,7 @@ def index order_by = params[:order_by] || 'id' head :not_found and return unless order_by.in? %w[id addresses_count block_timestamp] - udts = udts.order(params[:order_by]: order_by) + udts = udts.order(Arel.sql("#{order_by} #{asc_or_desc}")) .page(@page).per(@page_size).fast_page options = FastJsonapi::PaginationMetaGenerator.new(request: request, records: udts, page: @page, page_size: @page_size).call diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index 3653ac48d..887007f84 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -2,15 +2,14 @@ module Api::V2 class PendingTransactionsController < BaseController before_action :set_page_and_page_size def index - pending_transactions = PoolTransactionEntry.pool_transaction_pending. + pending_transactions = PoolTransactionEntry.pool_transaction_pending - asc_or_desc = params[:asc_or_desc] || 'desc' - order_by = params[:order_by] || 'id' - head :not_found and return unless order_by.in? %w[id, created_at, transaction_fee ] + asc_or_desc = params[:asc_or_desc] ||= 'desc' + order_by = params[:order_by] ||= 'id' + head :not_found and return unless order_by.in? %w[id created_at transaction_fee] - pending_transactions = pending_transactions.order(order_by: asc_or_desc) + pending_transactions = pending_transactions.order(Arel.sql("#{order_by} #{asc_or_desc}")) .page(@page).per(@page_size).fast_page - head :not_found and return if pending_transactions.blank? render json: { data: pending_transactions.map {|tx| From 70d1e7fcab953afaea4b18111a0430a6d9aedfd8 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 7 May 2023 15:37:56 +0800 Subject: [PATCH 11/23] finished: sorting in blocks api --- app/controllers/api/v1/blocks_controller.rb | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index f2c64de9e..15e8815fb 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -13,12 +13,20 @@ def index BlockListSerializer.new(blocks).serialized_json end else - blocks = Block.recent.select(:id, :miner_hash, :number, :timestamp, :reward, :ckb_transactions_count, :live_cell_changes, :updated_at) - asc_or_desc = params[:asc_or_desc] || 'desc' - order_by = params[:order_by] || 'number' + blocks = Block.select(:id, :miner_hash, :number, :timestamp, :reward, :ckb_transactions_count, :live_cell_changes, :updated_at) + params[:sort] ||= "timestamp.desc" + temp = params[:sort].split('.') + order_by = temp[0] + asc_or_desc = temp[1] + order_by = case order_by + when 'height' then 'number' + when 'transactions' then 'ckb_transactions_count' + else order_by + end head :not_found and return unless order_by.in? %w[number reward timestamp ckb_transactions_count] blocks = blocks.order(Arel.sql("#{order_by} #{asc_or_desc}")).page(@page).per(@page_size).fast_page + json = Rails.cache.realize(blocks.cache_key, version: blocks.cache_version, race_condition_ttl: 3.seconds) do records_counter = RecordCounters::Blocks.new From 5814306c8bb115eb9abb13edf497e6ba18a736fc Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 7 May 2023 15:52:10 +0800 Subject: [PATCH 12/23] finished: sorting in tx api --- .../api/v1/ckb_transactions_controller.rb | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index 02dbd2ddf..f3f05032b 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -17,17 +17,28 @@ def index end render json: json else - ckb_transactions = CkbTransaction.tx_committed.recent.normal.select( + ckb_transactions = CkbTransaction.normal.select( :id, :tx_hash, :block_number, :block_timestamp, :live_cell_changes, :capacity_involved, :updated_at ) - asc_or_desc = params[:asc_or_desc] || 'desc' - order_by = params[:order_by] || 'block_number' + params[:sort] ||= "block_number.desc" + temp = params[:sort].split('.') + order_by = temp[0] + asc_or_desc = temp[1] + order_by = case order_by + when 'height' then 'block_number' + when 'capacity' then 'capacity_involved' + else order_by + end + + if order_by == "capacity_involved" + asc_or_desc = "desc NULLS LAST" if asc_or_desc == "desc" + asc_or_desc = "asc NULLS FIRST" if asc_or_desc == "asc" + end + head :not_found and return unless order_by.in? %w[block_number block_timestamp transaction_fee capacity_involved] - ckb_transactions = ckb_transactions.order_by(block_number: asc_or_desc) if params[:order_by] == 'block_number' - ckb_transactions = ckb_transactions.order_by(block_timestamp: asc_or_desc) if params[:order_by] == 'block_timestamp' - ckb_transactions = ckb_transactions.order_by(transaction_fee: asc_or_desc) if params[:order_by] == 'transaction_fee' - ckb_transactions = ckb_transactions.page(@page).per(@page_size).fast_page + ckb_transactions = ckb_transactions.order(Arel.sql("#{order_by} #{asc_or_desc}")) + .page(@page).per(@page_size).fast_page json = Rails.cache.realize(ckb_transactions.cache_key, From 1b3dca26fd9d17b63d9cf5e6462d2ea01466def7 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 7 May 2023 16:04:59 +0800 Subject: [PATCH 13/23] finished: sorting in pending_tx api --- .../api/v2/pending_transactions_controller.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index 887007f84..b50bfd4f3 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -4,8 +4,18 @@ class PendingTransactionsController < BaseController def index pending_transactions = PoolTransactionEntry.pool_transaction_pending - asc_or_desc = params[:asc_or_desc] ||= 'desc' - order_by = params[:order_by] ||= 'id' + params[:sort] ||= "id.desc" + temp = params[:sort].split('.') + order_by = temp[0] + asc_or_desc = temp[1] + order_by = case order_by + when 'time' then 'created_at' + when 'fee' then 'transaction_fee' + # current we don't support this in DB + #when 'capacity' then 'capacity_involved' + else order_by + end + head :not_found and return unless order_by.in? %w[id created_at transaction_fee] pending_transactions = pending_transactions.order(Arel.sql("#{order_by} #{asc_or_desc}")) From e3b14eea96914cda08a187369f6c90efe6f27a98 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 7 May 2023 17:07:46 +0800 Subject: [PATCH 14/23] finished: sorting in udts api --- app/controllers/api/v1/udts_controller.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/udts_controller.rb b/app/controllers/api/v1/udts_controller.rb index 832e34b66..3d398f198 100644 --- a/app/controllers/api/v1/udts_controller.rb +++ b/app/controllers/api/v1/udts_controller.rb @@ -6,8 +6,18 @@ class Api::V1::UdtsController < ApplicationController def index udts = Udt.sudt - asc_or_desc = params[:asc_or_desc] || 'desc' - order_by = params[:order_by] || 'id' + params[:sort] ||= "id.desc" + temp = params[:sort].split('.') + order_by = temp[0] + asc_or_desc = temp[1] + order_by = case order_by + when 'created_time' then 'block_timestamp' + # current we don't support this in DB + # need a new PR + # when 'transactions' then '24h_ckb_transactions' + else order_by + end + head :not_found and return unless order_by.in? %w[id addresses_count block_timestamp] udts = udts.order(Arel.sql("#{order_by} #{asc_or_desc}")) From ce3e2ff2af4a3cb01a27318ac3336ca98d5ae644 Mon Sep 17 00:00:00 2001 From: iamyates Date: Sun, 7 May 2023 18:07:38 +0800 Subject: [PATCH 15/23] finished: sorting in /api/v1/address_transactions/[:id] api --- .../api/v1/address_transactions_controller.rb | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/address_transactions_controller.rb b/app/controllers/api/v1/address_transactions_controller.rb index 5cfed93d2..100b07742 100644 --- a/app/controllers/api/v1/address_transactions_controller.rb +++ b/app/controllers/api/v1/address_transactions_controller.rb @@ -10,13 +10,31 @@ def show @address = Address.find_address!(params[:id]) raise Api::V1::Exceptions::AddressNotFoundError if @address.is_a?(NullAddress) - @tx_ids = AccountBook.where(address_id: @address.id).order("ckb_transaction_id" => :desc).select("ckb_transaction_id").page(@page).per(@page_size).fast_page + @tx_ids = AccountBook + .joins(:ckb_transaction) + .where(address_id: @address.id) + + params[:sort] ||= "ckb_transaction_id.desc" + temp = params[:sort].split('.') + order_by = temp[0] + asc_or_desc = temp[1] + order_by = case order_by + when 'time' then 'ckb_transactions.block_timestamp' + else order_by + end + + head :not_found and return unless order_by.in? %w[ckb_transaction_id block_timestamp ckb_transactions.block_timestamp] + + @tx_ids = @tx_ids + .order(Arel.sql("#{order_by} #{asc_or_desc}")) + .select("ckb_transaction_id") + .page(@page).per(@page_size).fast_page + + order_by = 'id' if order_by == 'ckb_transaction_id' @ckb_transactions = CkbTransaction.tx_committed.where(id: @tx_ids.map(&:ckb_transaction_id)) .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at, :capacity_involved) - asc_or_desc = params[:asc_or_desc] || 'desc' - @ckb_transactions = @ckb_transactions.order(id: asc_or_desc) if params[:sort_by].blank? || params[:sort_by] == 'time' - @ckb_transactions = @ckb_transactions.order(capacity_involved: asc_or_desc) if params[:send_volume] - @ckb_transactions = @ckb_transactions.order(capacity_involved: asc_or_desc) if params[:received_volume] + .order(Arel.sql("#{order_by} #{asc_or_desc}")) + json = Rails.cache.realize("#{@ckb_transactions.cache_key}/#{@address.query_address}", version: @ckb_transactions.cache_version) do @options = FastJsonapi::PaginationMetaGenerator.new(request: request, records: @ckb_transactions, page: @page, page_size: @page_size, records_counter: @tx_ids).call From f1f0464d93ce1d52530c072889ceda4add4a18be Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 8 May 2023 07:59:53 +0800 Subject: [PATCH 16/23] fixed failed unit test of: app/controllers/api/v2/nft/collections_controller.rb --- app/controllers/api/v2/nft/collections_controller.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v2/nft/collections_controller.rb b/app/controllers/api/v2/nft/collections_controller.rb index b9830e412..4408e86a7 100644 --- a/app/controllers/api/v2/nft/collections_controller.rb +++ b/app/controllers/api/v2/nft/collections_controller.rb @@ -2,8 +2,16 @@ module Api module V2 class NFT::CollectionsController < BaseController def index - asc_or_desc = params[:asc_or_desc] || 'desc' - order_by = params[:order_by] || 'id' + params[:sort] ||= "id.desc" + temp = params[:sort].split('.') + order_by = temp[0] + asc_or_desc = temp[1] + order_by = case order_by + # TODO need to merge PR: https://github.com/nervosnetwork/ckb-explorer/pull/1266 + when 'transactions' then 'h24_transactions_count' + else order_by + end + head :not_found and return unless order_by.in? %w[id holders_count items_count] collections = TokenCollection From bc31f851c050c05a40e588c5a0c5217506829f9f Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 8 May 2023 08:17:51 +0800 Subject: [PATCH 17/23] fixed failt unit test for: controllers/api/v1/block_transactions_controller --- .../api/v1/block_transactions_controller_test.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/test/controllers/api/v1/block_transactions_controller_test.rb b/test/controllers/api/v1/block_transactions_controller_test.rb index 7b6c48377..f06d92399 100644 --- a/test/controllers/api/v1/block_transactions_controller_test.rb +++ b/test/controllers/api/v1/block_transactions_controller_test.rb @@ -80,7 +80,7 @@ class BlockTransactionsControllerTest < ActionDispatch::IntegrationTest valid_get api_v1_block_transaction_url(block.block_hash) - ckb_transactions = block.ckb_transactions.order(:id).page(page).per(page_size) + ckb_transactions = block.ckb_transactions.order('id desc').page(page).per(page_size) records_counter = RecordCounters::BlockTransactions.new(block) options = FastJsonapi::PaginationMetaGenerator.new(request: request, records: ckb_transactions, page: page, page_size: page_size, records_counter: records_counter).call @@ -157,7 +157,7 @@ class BlockTransactionsControllerTest < ActionDispatch::IntegrationTest page = 2 page_size = 10 block = create(:block, :with_ckb_transactions, transactions_count: 30) - block_ckb_transactions = block.ckb_transactions.order(:id).page(page).per(page_size) + block_ckb_transactions = block.ckb_transactions.order('id desc').page(page).per(page_size) valid_get api_v1_block_transaction_url(block.block_hash), params: { page: page } @@ -173,7 +173,7 @@ class BlockTransactionsControllerTest < ActionDispatch::IntegrationTest page = 1 page_size = 12 block = create(:block, :with_ckb_transactions, transactions_count: 15) - block_ckb_transactions = block.ckb_transactions.order(:id).page(page).per(page_size) + block_ckb_transactions = block.ckb_transactions.order('id desc').page(page).per(page_size) valid_get api_v1_block_transaction_url(block.block_hash), params: { page_size: page_size } @@ -186,10 +186,11 @@ class BlockTransactionsControllerTest < ActionDispatch::IntegrationTest end test "should return the corresponding transactions when page and page_size are set" do + CkbTransaction.delete_all page = 2 page_size = 5 block = create(:block, :with_ckb_transactions, transactions_count: 30) - block_ckb_transactions = block.ckb_transactions.order(:id).page(page).per(page_size) + block_ckb_transactions = block.ckb_transactions.order('id desc').page(page).per(page_size) valid_get api_v1_block_transaction_url(block.block_hash), params: { page: page, page_size: page_size } @@ -204,7 +205,7 @@ class BlockTransactionsControllerTest < ActionDispatch::IntegrationTest page = 2 page_size = 5 block = create(:block) - block_ckb_transactions = block.ckb_transactions.order(:id).page(page).per(page_size) + block_ckb_transactions = block.ckb_transactions.order('id desc').page(page).per(page_size) valid_get api_v1_block_transaction_url(block.block_hash), params: { page: page, page_size: page_size } From 111d341f7780f54301e5cc9c95aed2cfd270b1f2 Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 8 May 2023 08:34:44 +0800 Subject: [PATCH 18/23] remove useless index --- db/migrate/20230422003834_add_index_to_blocks_reward.rb | 5 ----- db/migrate/20230424004812_add_index_to_ckb_transactions.rb | 7 ------- ...230424012931_add_index_to_token_collections_standard.rb | 5 ----- 3 files changed, 17 deletions(-) delete mode 100644 db/migrate/20230422003834_add_index_to_blocks_reward.rb delete mode 100644 db/migrate/20230424004812_add_index_to_ckb_transactions.rb delete mode 100644 db/migrate/20230424012931_add_index_to_token_collections_standard.rb diff --git a/db/migrate/20230422003834_add_index_to_blocks_reward.rb b/db/migrate/20230422003834_add_index_to_blocks_reward.rb deleted file mode 100644 index eac372a7c..000000000 --- a/db/migrate/20230422003834_add_index_to_blocks_reward.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddIndexToBlocksReward < ActiveRecord::Migration[7.0] - def change - add_index :blocks, :reward - end -end diff --git a/db/migrate/20230424004812_add_index_to_ckb_transactions.rb b/db/migrate/20230424004812_add_index_to_ckb_transactions.rb deleted file mode 100644 index 389eccded..000000000 --- a/db/migrate/20230424004812_add_index_to_ckb_transactions.rb +++ /dev/null @@ -1,7 +0,0 @@ -class AddIndexToCkbTransactions < ActiveRecord::Migration[7.0] - def change - add_index :ckb_transactions, :block_number - add_index :ckb_transactions, :block_timestamp - add_index :ckb_transactions, :transaction_fee - end -end diff --git a/db/migrate/20230424012931_add_index_to_token_collections_standard.rb b/db/migrate/20230424012931_add_index_to_token_collections_standard.rb deleted file mode 100644 index 35ff89fb7..000000000 --- a/db/migrate/20230424012931_add_index_to_token_collections_standard.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddIndexToTokenCollectionsStandard < ActiveRecord::Migration[7.0] - def change - add_index :token_collections, :standard - end -end From 530c14f6637e07faa78e0620e213a7e5d881a8d0 Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 8 May 2023 15:09:30 +0800 Subject: [PATCH 19/23] added more columns to sort --- app/controllers/api/v1/udts_controller.rb | 4 ++-- app/controllers/api/v2/nft/collections_controller.rb | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/udts_controller.rb b/app/controllers/api/v1/udts_controller.rb index 3d398f198..505378f6e 100644 --- a/app/controllers/api/v1/udts_controller.rb +++ b/app/controllers/api/v1/udts_controller.rb @@ -13,8 +13,8 @@ def index order_by = case order_by when 'created_time' then 'block_timestamp' # current we don't support this in DB - # need a new PR - # when 'transactions' then '24h_ckb_transactions' + # need a new PR https://github.com/nervosnetwork/ckb-explorer/pull/1266/ + # when 'transactions' then 'h24_ckb_transactions_count' else order_by end diff --git a/app/controllers/api/v2/nft/collections_controller.rb b/app/controllers/api/v2/nft/collections_controller.rb index 4408e86a7..ffa811dce 100644 --- a/app/controllers/api/v2/nft/collections_controller.rb +++ b/app/controllers/api/v2/nft/collections_controller.rb @@ -9,6 +9,8 @@ def index order_by = case order_by # TODO need to merge PR: https://github.com/nervosnetwork/ckb-explorer/pull/1266 when 'transactions' then 'h24_transactions_count' + when 'holder' then 'holders_count' + when 'minted' then 'items_count' else order_by end From c183675bf37df6f61f595e118028163913ea7bbc Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 22 May 2023 09:46:17 +0800 Subject: [PATCH 20/23] fixed failed unit test, for api/v1/ckb_transactions --- app/controllers/api/v1/ckb_transactions_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index f3f05032b..6fe4c1590 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -21,7 +21,7 @@ def index :id, :tx_hash, :block_number, :block_timestamp, :live_cell_changes, :capacity_involved, :updated_at ) - params[:sort] ||= "block_number.desc" + params[:sort] ||= "id.desc" temp = params[:sort].split('.') order_by = temp[0] asc_or_desc = temp[1] @@ -35,7 +35,7 @@ def index asc_or_desc = "desc NULLS LAST" if asc_or_desc == "desc" asc_or_desc = "asc NULLS FIRST" if asc_or_desc == "asc" end - head :not_found and return unless order_by.in? %w[block_number block_timestamp transaction_fee capacity_involved] + head :not_found and return unless order_by.in? %w[id block_number block_timestamp transaction_fee capacity_involved] ckb_transactions = ckb_transactions.order(Arel.sql("#{order_by} #{asc_or_desc}")) .page(@page).per(@page_size).fast_page From d32a2bb3129776fe486b53dad4c969eaad101126 Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 29 May 2023 10:16:58 +0800 Subject: [PATCH 21/23] used order(order_by => asc_or_desc) --- app/controllers/api/v1/address_transactions_controller.rb | 4 ++-- app/controllers/api/v1/blocks_controller.rb | 2 +- app/controllers/api/v1/ckb_transactions_controller.rb | 2 +- app/controllers/api/v1/udts_controller.rb | 2 +- app/controllers/api/v2/pending_transactions_controller.rb | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v1/address_transactions_controller.rb b/app/controllers/api/v1/address_transactions_controller.rb index 100b07742..7fe24acf7 100644 --- a/app/controllers/api/v1/address_transactions_controller.rb +++ b/app/controllers/api/v1/address_transactions_controller.rb @@ -26,14 +26,14 @@ def show head :not_found and return unless order_by.in? %w[ckb_transaction_id block_timestamp ckb_transactions.block_timestamp] @tx_ids = @tx_ids - .order(Arel.sql("#{order_by} #{asc_or_desc}")) + .order(order_by => asc_or_desc) .select("ckb_transaction_id") .page(@page).per(@page_size).fast_page order_by = 'id' if order_by == 'ckb_transaction_id' @ckb_transactions = CkbTransaction.tx_committed.where(id: @tx_ids.map(&:ckb_transaction_id)) .select(:id, :tx_hash, :block_id, :block_number, :block_timestamp, :is_cellbase, :updated_at, :capacity_involved) - .order(Arel.sql("#{order_by} #{asc_or_desc}")) + .order(order_by => asc_or_desc) json = Rails.cache.realize("#{@ckb_transactions.cache_key}/#{@address.query_address}", version: @ckb_transactions.cache_version) do diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index 15e8815fb..d96473693 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -25,7 +25,7 @@ def index end head :not_found and return unless order_by.in? %w[number reward timestamp ckb_transactions_count] - blocks = blocks.order(Arel.sql("#{order_by} #{asc_or_desc}")).page(@page).per(@page_size).fast_page + blocks = blocks.order(order_by => asc_or_desc).page(@page).per(@page_size).fast_page json = Rails.cache.realize(blocks.cache_key, version: blocks.cache_version, race_condition_ttl: 3.seconds) do diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index 6fe4c1590..af5bb0ec7 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -37,7 +37,7 @@ def index end head :not_found and return unless order_by.in? %w[id block_number block_timestamp transaction_fee capacity_involved] - ckb_transactions = ckb_transactions.order(Arel.sql("#{order_by} #{asc_or_desc}")) + ckb_transactions = ckb_transactions.order(order_by => asc_or_desc) .page(@page).per(@page_size).fast_page json = diff --git a/app/controllers/api/v1/udts_controller.rb b/app/controllers/api/v1/udts_controller.rb index 505378f6e..08f2b4339 100644 --- a/app/controllers/api/v1/udts_controller.rb +++ b/app/controllers/api/v1/udts_controller.rb @@ -20,7 +20,7 @@ def index head :not_found and return unless order_by.in? %w[id addresses_count block_timestamp] - udts = udts.order(Arel.sql("#{order_by} #{asc_or_desc}")) + udts = udts.order(order_by => asc_or_desc) .page(@page).per(@page_size).fast_page options = FastJsonapi::PaginationMetaGenerator.new(request: request, records: udts, page: @page, page_size: @page_size).call diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index b50bfd4f3..ea14f5997 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -18,7 +18,7 @@ def index head :not_found and return unless order_by.in? %w[id created_at transaction_fee] - pending_transactions = pending_transactions.order(Arel.sql("#{order_by} #{asc_or_desc}")) + pending_transactions = pending_transactions.order(order_by => asc_or_desc) .page(@page).per(@page_size).fast_page render json: { From 6aecb15e6fd1de22586c93d519ea4cc5b1b974bf Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 29 May 2023 11:13:30 +0800 Subject: [PATCH 22/23] improved code, used split(., 2) --- app/controllers/api/v1/address_transactions_controller.rb | 4 +--- app/controllers/api/v1/blocks_controller.rb | 5 ++--- app/controllers/api/v1/ckb_transactions_controller.rb | 5 ++--- app/controllers/api/v1/udts_controller.rb | 5 ++--- app/controllers/api/v2/nft/collections_controller.rb | 5 ++--- app/controllers/api/v2/pending_transactions_controller.rb | 5 +---- 6 files changed, 10 insertions(+), 19 deletions(-) diff --git a/app/controllers/api/v1/address_transactions_controller.rb b/app/controllers/api/v1/address_transactions_controller.rb index 7fe24acf7..ba158c68e 100644 --- a/app/controllers/api/v1/address_transactions_controller.rb +++ b/app/controllers/api/v1/address_transactions_controller.rb @@ -15,9 +15,7 @@ def show .where(address_id: @address.id) params[:sort] ||= "ckb_transaction_id.desc" - temp = params[:sort].split('.') - order_by = temp[0] - asc_or_desc = temp[1] + order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by when 'time' then 'ckb_transactions.block_timestamp' else order_by diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index d96473693..0a42d0c4d 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -15,9 +15,8 @@ def index else blocks = Block.select(:id, :miner_hash, :number, :timestamp, :reward, :ckb_transactions_count, :live_cell_changes, :updated_at) params[:sort] ||= "timestamp.desc" - temp = params[:sort].split('.') - order_by = temp[0] - asc_or_desc = temp[1] + + order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by when 'height' then 'number' when 'transactions' then 'ckb_transactions_count' diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index af5bb0ec7..159a4b4e6 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -22,9 +22,8 @@ def index ) params[:sort] ||= "id.desc" - temp = params[:sort].split('.') - order_by = temp[0] - asc_or_desc = temp[1] + + order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by when 'height' then 'block_number' when 'capacity' then 'capacity_involved' diff --git a/app/controllers/api/v1/udts_controller.rb b/app/controllers/api/v1/udts_controller.rb index 08f2b4339..f2cea54dd 100644 --- a/app/controllers/api/v1/udts_controller.rb +++ b/app/controllers/api/v1/udts_controller.rb @@ -7,9 +7,8 @@ def index udts = Udt.sudt params[:sort] ||= "id.desc" - temp = params[:sort].split('.') - order_by = temp[0] - asc_or_desc = temp[1] + + order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by when 'created_time' then 'block_timestamp' # current we don't support this in DB diff --git a/app/controllers/api/v2/nft/collections_controller.rb b/app/controllers/api/v2/nft/collections_controller.rb index ffa811dce..4ffbe0abb 100644 --- a/app/controllers/api/v2/nft/collections_controller.rb +++ b/app/controllers/api/v2/nft/collections_controller.rb @@ -3,9 +3,8 @@ module V2 class NFT::CollectionsController < BaseController def index params[:sort] ||= "id.desc" - temp = params[:sort].split('.') - order_by = temp[0] - asc_or_desc = temp[1] + + order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by # TODO need to merge PR: https://github.com/nervosnetwork/ckb-explorer/pull/1266 when 'transactions' then 'h24_transactions_count' diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index ea14f5997..e160b280a 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -4,10 +4,7 @@ class PendingTransactionsController < BaseController def index pending_transactions = PoolTransactionEntry.pool_transaction_pending - params[:sort] ||= "id.desc" - temp = params[:sort].split('.') - order_by = temp[0] - asc_or_desc = temp[1] + order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by when 'time' then 'created_at' when 'fee' then 'transaction_fee' From 24dbcb44539cafea67d483d5088922195ec085b9 Mon Sep 17 00:00:00 2001 From: iamyates Date: Mon, 29 May 2023 11:43:08 +0800 Subject: [PATCH 23/23] fixed failed unit tests --- app/controllers/api/v1/ckb_transactions_controller.rb | 4 ---- app/controllers/api/v2/nft/collections_controller.rb | 4 ++-- app/controllers/api/v2/pending_transactions_controller.rb | 1 + 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v1/ckb_transactions_controller.rb b/app/controllers/api/v1/ckb_transactions_controller.rb index 159a4b4e6..34dcf25da 100644 --- a/app/controllers/api/v1/ckb_transactions_controller.rb +++ b/app/controllers/api/v1/ckb_transactions_controller.rb @@ -30,10 +30,6 @@ def index else order_by end - if order_by == "capacity_involved" - asc_or_desc = "desc NULLS LAST" if asc_or_desc == "desc" - asc_or_desc = "asc NULLS FIRST" if asc_or_desc == "asc" - end head :not_found and return unless order_by.in? %w[id block_number block_timestamp transaction_fee capacity_involved] ckb_transactions = ckb_transactions.order(order_by => asc_or_desc) diff --git a/app/controllers/api/v2/nft/collections_controller.rb b/app/controllers/api/v2/nft/collections_controller.rb index 4ffbe0abb..ee6660a33 100644 --- a/app/controllers/api/v2/nft/collections_controller.rb +++ b/app/controllers/api/v2/nft/collections_controller.rb @@ -18,10 +18,10 @@ def index collections = TokenCollection collections = collections.where(standard: params[:type]) if params[:type].present? collections = collections - .order(params[:order_by]: order_by) + .order(order_by => asc_or_desc) .page(@page).per(@page_size).fast_page - @pagy, @collections = pagy(collections).fast_page + @pagy, @collections = pagy(collections) render json: { data: @collections, pagination: pagy_metadata(@pagy) diff --git a/app/controllers/api/v2/pending_transactions_controller.rb b/app/controllers/api/v2/pending_transactions_controller.rb index e160b280a..8b3dd5bde 100644 --- a/app/controllers/api/v2/pending_transactions_controller.rb +++ b/app/controllers/api/v2/pending_transactions_controller.rb @@ -4,6 +4,7 @@ class PendingTransactionsController < BaseController def index pending_transactions = PoolTransactionEntry.pool_transaction_pending + params[:sort] ||= "id.desc" order_by, asc_or_desc = params[:sort].split('.', 2) order_by = case order_by when 'time' then 'created_at'