added last_tx switch to the TX get query to only get the latest TX for a given asset.

Signed-off-by: Juergen Eckel <juergen@riddleandcode.com>
This commit is contained in:
Jürgen 2019-09-27 00:26:36 +02:00 committed by Juergen Eckel
parent c801c833fc
commit a9476719a8
3 changed files with 29 additions and 11 deletions

View File

@ -261,7 +261,7 @@ class BigchainDB(object):
def get_transactions(self, txn_ids):
return backend.query.get_transactions(self.connection, txn_ids)
def get_transactions_filtered(self, asset_id, operation=None):
def get_transactions_filtered(self, asset_id, operation=None, last_tx=None):
"""Get a list of transactions filtered on some criteria
"""
txids = backend.query.get_txids_filtered(self.connection, asset_id,

View File

@ -41,19 +41,31 @@ class TransactionApi(Resource):
return tx.to_dict()
class TransactionListApi(Resource):
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('operation', type=parameters.valid_operation)
parser.add_argument('asset_id', type=parameters.valid_txid,
required=True)
parser.add_argument('last_tx', type=parameters.valid_bool,
required=False)
args = parser.parse_args()
with current_app.config['bigchain_pool']() as bigchain:
txs = bigchain.get_transactions_filtered(**args)
print( txs )
if args['last_tx'] and args['last_tx']==True:
lastTX = None
for x in txs:
lastTX = x
return [tx.to_dict() for tx in txs]
if lastTX:
return [ lastTX.to_dict() ]
else:
return []
else:
return [tx.to_dict() for tx in txs]
def post(self):
"""API endpoint to push transactions to the Federation.

View File

@ -91,7 +91,7 @@ Transactions
Requests to the ``/api/v1/transactions`` endpoint
without any query parameters will get a response status code ``400 Bad Request``.
.. http:get:: /api/v1/transactions?asset_id={asset_id}&operation={CREATE|TRANSFER}
.. http:get:: /api/v1/transactions?asset_id={asset_id}&operation={CREATE|TRANSFER}&last_tx={true|false}
Get a list of transactions that use an asset with the ID ``asset_id``.
@ -106,12 +106,18 @@ Transactions
If ``operation`` is not included, then *every* transaction involving
the asset with ID ``asset_id`` will be returned.
if ``last_tx`` is set to ``true``, only the last transaction is returned
instead of all transactions with the given ``asset_id``.
This endpoint returns transactions only if they are in committed blocks.
:query string operation: (Optional) ``CREATE`` or ``TRANSFER``.
:query string asset_id: asset ID.
:query string last_tx: (Optional) ``true`` or ``false``.
**Example request**:
.. literalinclude:: http-samples/get-tx-by-asset-request.http