wiki:UC0006

Use-case 0006 — View portfolio and transaction history

Initiating actor: Trader

Other actors: —

A Trader inspects their current holdings, unrealised P/L, cash balance and recent ledger.

Scenario

Portfolio

  1. Trader chooses "View portfolio".
  2. System queries the v_portfolio view:
SELECT symbol,
       quantity,
       COALESCE(reserved_quantity,  0),
       COALESCE(available_quantity, quantity),
       COALESCE(avg_price,      0),
       COALESCE(current_price,  0),
       COALESCE(market_value,   0),
       COALESCE(unrealized_pnl, 0)
  FROM project.v_portfolio
 WHERE user_id = $1
   AND quantity > 0
 ORDER BY symbol;

reserved_quantity is the amount committed to the Trader's own open sell orders (see UseCase0005); available_quantity is what is actually free to sell right now.

  1. System displays the rows and a computed summary:
SELECT available_balance, invested_balance
  FROM project.users
 WHERE id = $1;

Transaction history

  1. Trader chooses "View transaction history".
  2. System queries the last 20 ledger entries:
SELECT created_at, type, amount, currency, COALESCE(description, '')
  FROM project.transactions
 WHERE user_id = $1
 ORDER BY created_at DESC
 LIMIT 20;

Reference — how v_portfolio is defined

CREATE OR REPLACE VIEW project.v_portfolio AS
SELECT h.user_id,
       c.symbol,
       h.quantity,
       h.reserved_quantity,
       (h.quantity - h.reserved_quantity)      AS available_quantity,
       h.avg_price,
       lp.price                                AS current_price,
       (h.quantity * lp.price)                 AS market_value,
       (h.quantity * (lp.price - h.avg_price)) AS unrealized_pnl
  FROM project.holdings h
  JOIN project.crypto   c ON c.id = h.crypto_id
  LEFT JOIN project.markets m
         ON m.crypto_id = c.id AND m.quote_currency = 'USD'
  LEFT JOIN project.v_latest_prices lp
         ON lp.market_id = m.id;
Last modified 3 days ago Last modified on 09/24/26 13:50:38
Note: See TracWiki for help on using the wiki.