aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuppie2026-10-22 17:18:55 -0600
committerstuppie2026-10-22 17:18:55 -0600
commit9e4a5669ba162479a64e553f26bf9b0ffd520e01 (patch)
tree6e3c15480a6f3d9f5e376c52d017e9158676de96
parentc7950ba704dd50e177a7a381b1d8a0faa3a3d33b (diff)
downloadgeneralresearch-9e4a5669ba162479a64e553f26bf9b0ffd520e01.tar.gz
generalresearch-9e4a5669ba162479a64e553f26bf9b0ffd520e01.zip
ledger bp txs, optionally filter by user in metadata
-rw-r--r--generalresearch/managers/thl/ledger_manager/ledger.py29
-rw-r--r--generalresearch/managers/thl/ledger_manager/thl_ledger.py15
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