fix: qualify corporate-action ledger reads (#36)

This commit is contained in:
2026-09-13 22:02:43 +09:00
committed by GitHub
parent c7d8235bde
commit 8841bdd441
12 changed files with 290 additions and 22 deletions
+19 -17
View File
@@ -1970,13 +1970,13 @@ class PostgresPortfolioRepository:
cur.execute(
"""
SELECT
ledger_entry_id, portfolio_id, order_id, execution_id, side,
quantity::float8, price::float8,
fee_amount::float8, tax_amount::float8,
executed_at, recorded_at,
cash_balance_after::float8, asset_quantity_after::float8,
total_value_after::float8, profit_buffer_after::float8,
strategy_set_id, note, source,
ledger.ledger_entry_id, ledger.portfolio_id, ledger.order_id, ledger.execution_id, ledger.side,
ledger.quantity::float8, ledger.price::float8,
ledger.fee_amount::float8, ledger.tax_amount::float8,
ledger.executed_at, ledger.recorded_at,
ledger.cash_balance_after::float8, ledger.asset_quantity_after::float8,
ledger.total_value_after::float8, ledger.profit_buffer_after::float8,
ledger.strategy_set_id, ledger.note, ledger.source,
ca.corporate_action_id, ca.action_type, ca.effective_date,
ca.quantity_before, ca.quantity_after, ca.average_price_before,
ca.average_price_after, ca.total_cost_basis, ca.cash_balance,
@@ -2643,30 +2643,32 @@ class PostgresPortfolioRepository:
limit: int = 50,
) -> list[LedgerEntry]:
self.ensure_schema()
clauses = ["portfolio_id = %s"]
clauses = ["ledger.portfolio_id = %s"]
params: list[Any] = [portfolio_id]
if source is not None:
clauses.append("source = %s")
clauses.append("ledger.source = %s")
params.append(source)
if before_recorded_at is not None and before_ledger_entry_id is not None:
clauses.append("(recorded_at, ledger_entry_id) < (%s, %s)")
clauses.append("(ledger.recorded_at, ledger.ledger_entry_id) < (%s, %s)")
params.extend([before_recorded_at, before_ledger_entry_id])
params.append(int(limit))
with self._connect().cursor() as cur:
cur.execute(
"""
SELECT ledger_entry_id, portfolio_id, order_id, execution_id, side, quantity, price,
fee_amount, tax_amount, executed_at, recorded_at, cash_balance_after,
asset_quantity_after, total_value_after, profit_buffer_after, strategy_set_id,
note, source, target_ledger_entry_id, confirmation_evidence, actor_user_id,
SELECT ledger.ledger_entry_id, ledger.portfolio_id, ledger.order_id, ledger.execution_id, ledger.side,
ledger.quantity, ledger.price, ledger.fee_amount, ledger.tax_amount,
ledger.executed_at, ledger.recorded_at, ledger.cash_balance_after,
ledger.asset_quantity_after, ledger.total_value_after, ledger.profit_buffer_after,
ledger.strategy_set_id, ledger.note, ledger.source, ledger.target_ledger_entry_id,
ledger.confirmation_evidence, ledger.actor_user_id,
ca.corporate_action_id, ca.action_type, ca.effective_date,
ca.quantity_before, ca.quantity_after, ca.average_price_before,
ca.average_price_after, ca.total_cost_basis, ca.cash_balance,
ca.profit_buffer, ca.evidence_ref, ca.actor_user_id
FROM portfolio_ledger
LEFT JOIN portfolio_corporate_actions ca ON ca.ledger_entry_id = portfolio_ledger.ledger_entry_id
FROM portfolio_ledger AS ledger
LEFT JOIN portfolio_corporate_actions AS ca ON ca.ledger_entry_id = ledger.ledger_entry_id
WHERE """ + " AND ".join(clauses) + """
ORDER BY recorded_at DESC, ledger_entry_id DESC
ORDER BY ledger.recorded_at DESC, ledger.ledger_entry_id DESC
LIMIT %s
""",
params,