diff --git a/app/controllers/api/v1/address_live_cells_controller.rb b/app/controllers/api/v1/address_live_cells_controller.rb index f1dc08970..4e3dc7f8a 100644 --- a/app/controllers/api/v1/address_live_cells_controller.rb +++ b/app/controllers/api/v1/address_live_cells_controller.rb @@ -8,7 +8,7 @@ def show json = Addresses::LiveCells.run!( { request:, - key: params[:id], sort: params[:sort], + key: params[:id], sort: params[:sort], bound_status: params[:bound_status], page: params[:page], page_size: params[:page_size] }, ) render json: diff --git a/app/interactions/addresses/live_cells.rb b/app/interactions/addresses/live_cells.rb index 5c0131b1a..0fc2ca757 100644 --- a/app/interactions/addresses/live_cells.rb +++ b/app/interactions/addresses/live_cells.rb @@ -4,6 +4,7 @@ class LiveCells < ActiveInteraction::Base object :request, class: ActionDispatch::Request string :key, default: nil + string :bound_status, default: nil string :sort, default: "block_timestamp.desc" integer :page, default: 1 integer :page_size, default: CellOutput.default_per_page @@ -13,15 +14,13 @@ def execute raise AddressNotFoundError if address.is_a?(NullAddress) order_by, asc_or_desc = live_cells_ordering - records = - if order_by == "block_timestamp" - ids = CellOutput.live.where(address_id: address.map(&:id)).pluck(:id) - CellOutput.where(id: ids).order(order_by => asc_or_desc).page(page).per(page_size).fast_page - else - CellOutput.live.where(address_id: address.map(&:id)). - order(order_by => asc_or_desc). - page(page).per(page_size).fast_page - end + cell_outputs = CellOutput.includes(:bitcoin_vout).where( + cell_outputs: { status: "live", address_id: address.map(&:id) }, + ) + cell_outputs = cell_outputs.where(bitcoin_vouts: { status: bound_status }) if bound_status + cell_output_ids = cell_outputs.pluck("cell_outputs.id") + records = CellOutput.where(id: cell_output_ids).order(order_by => asc_or_desc). + page(page).per(page_size).fast_page options = FastJsonapi::PaginationMetaGenerator.new( request:, records:, page:, page_size:, ).call