diff options
| author | stuppie | 2026-10-22 17:18:55 -0600 |
|---|---|---|
| committer | stuppie | 2026-10-22 17:18:55 -0600 |
| commit | 9e4a5669ba162479a64e553f26bf9b0ffd520e01 (patch) | |
| tree | 6e3c15480a6f3d9f5e376c52d017e9158676de96 | |
| parent | c7950ba704dd50e177a7a381b1d8a0faa3a3d33b (diff) | |
| download | generalresearch-9e4a5669ba162479a64e553f26bf9b0ffd520e01.tar.gz generalresearch-9e4a5669ba162479a64e553f26bf9b0ffd520e01.zip | |
ledger bp txs, optionally filter by user in metadata
| -rw-r--r-- | generalresearch/managers/thl/ledger_manager/ledger.py | 29 | ||||
| -rw-r--r-- | generalresearch/managers/thl/ledger_manager/thl_ledger.py | 15 |
2 files changed, 42 insertions, 2 deletions
diff --git a/generalresearch/managers/thl/ledger_manager/ledger.py b/generalresearch/managers/thl/ledger_manager/ledger.py index 1372d68..1ed81a7 100644 --- a/generalresearch/managers/thl/ledger_manager/ledger.py +++ b/generalresearch/managers/thl/ledger_manager/ledger.py @@ -117,6 +117,7 @@ class LedgerManagerBasePostgres(PostgresManager, RedisManager): filters.append("le.account_id = %(account_uuid)s") params["account_uuid"] = account_uuid if metadata_key is not None: + assert metadata_value is not None filters.append("key = %(metadata_key)s") params["metadata_key"] = metadata_key if metadata_value is not None: @@ -508,10 +509,20 @@ class LedgerTransactionManager(LedgerManagerBasePostgres): account_uuid: UUIDStr, time_start: datetime | None = None, time_end: datetime | None = None, + metadata_key: str | None = None, + metadata_value: str | None = None, ) -> NonNegativeInt: filter_str, params = self.make_filter_str( time_start=time_start, time_end=time_end, + metadata_key=metadata_key, + metadata_value=metadata_value + ) + ltm_join = ( + """JOIN ledger_transactionmetadata ltm + ON ltm.transaction_id = lt.id""" + if metadata_key is not None + else "" ) params["account_uuid"] = account_uuid @@ -522,6 +533,7 @@ class LedgerTransactionManager(LedgerManagerBasePostgres): JOIN ledger_entry le ON le.transaction_id = lt.id AND le.account_id = %(account_uuid)s + {ltm_join} {filter_str} """, params=params, @@ -612,6 +624,8 @@ class LedgerTransactionManager(LedgerManagerBasePostgres): account_uuid: UUIDStr, time_start: datetime | None = None, time_end: datetime | None = None, + metadata_key: str | None = None, + metadata_value: str | None = None, page: int | None = None, size: int | None = None, order_by: str | None = "created,tag", @@ -639,7 +653,17 @@ class LedgerTransactionManager(LedgerManagerBasePostgres): check_valid_uuid(account_uuid) filter_str, params = self.make_filter_str( - time_start=time_start, time_end=time_end, account_uuid=account_uuid + time_start=time_start, + time_end=time_end, + account_uuid=account_uuid, + metadata_key=metadata_key, + metadata_value=metadata_value, + ) + ltm_join = ( + """JOIN ledger_transactionmetadata ltm + ON ltm.transaction_id = lt.id""" + if metadata_key is not None + else "" ) if page is not None: @@ -655,6 +679,8 @@ class LedgerTransactionManager(LedgerManagerBasePostgres): account_uuid=account_uuid, time_start=time_start, time_end=time_end, + metadata_key=metadata_key, + metadata_value=metadata_value, ) else: paginated_filter_str = "" @@ -670,6 +696,7 @@ class LedgerTransactionManager(LedgerManagerBasePostgres): FROM ledger_transaction lt JOIN ledger_entry le ON le.transaction_id = lt.id + {ltm_join} {filter_str} GROUP BY lt.id, lt.created {order_by_str} diff --git a/generalresearch/managers/thl/ledger_manager/thl_ledger.py b/generalresearch/managers/thl/ledger_manager/thl_ledger.py index 3920cda..c96e27c 100644 --- a/generalresearch/managers/thl/ledger_manager/thl_ledger.py +++ b/generalresearch/managers/thl/ledger_manager/thl_ledger.py @@ -2330,12 +2330,17 @@ class ThlLedgerManager(LedgerManager): def get_bp_txs( self, product_id: str, + user: User | None = None, time_start: datetime | None = None, time_end: datetime | None = None, page: int = 1, size: int = 50, order_by: str | None = "created,tag", ): + """ + Get transactions affecting the BP's wallet balance. + Optionally filter by txs related to this User + """ bp_account = self.get_account_or_create_bp_wallet_by_uuid(product_id) assert bp_account.reference_type == "bp", "Account must be a BP ledger account" assert bp_account.reference_uuid == product_id, "Account must be owned by BP" @@ -2357,13 +2362,21 @@ class ThlLedgerManager(LedgerManager): if time_start is not None else JAMES_BILLINGS_TX_CUTOFF ) + + metadata_key, metadata_value = None, None + if user is not None: + assert user.uuid is not None + metadata_key, metadata_value = "user", user.uuid + txs, total = self.get_tx_filtered_by_account_paginated( bp_account.uuid, time_start=time_start, time_end=time_end, + metadata_key=metadata_key, + metadata_value=metadata_value, page=page, size=size, order_by=order_by, ) txs = [tx.to_brokerage_product_tx(bp_account) for tx in txs] - return txs, total
\ No newline at end of file + return txs, total |
