Files
miti99bot/plans/reports/fullstack-260415-1052-phase-03-trading-history.md

39 lines
2.1 KiB
Markdown

# Phase 03 — Trading Trade History: Implementation Report
## Files Modified / Created
| File | Action |
|---|---|
| `src/modules/trading/migrations/0001_trades.sql` | Created — schema + 2 indexes |
| `src/modules/trading/history.js` | Created — `recordTrade`, `listTrades`, `formatTradesHtml`, `createHistoryHandler` |
| `src/modules/trading/handlers.js` | Modified — `handleBuy`/`handleSell` accept optional `onTrade` callback |
| `src/modules/trading/index.js` | Modified — accept `sql` in init, wire `onTrade`, register `/history` command |
| `tests/modules/trading/history.test.js` | Created — 21 tests |
| `plans/260415-1010-d1-cron-infra/phase-03-trading-history.md` | Status → Complete, todos ticked |
| `plans/260415-1010-d1-cron-infra/plan.md` | Phase 03 → Complete |
## Tasks Completed
- [x] Migration SQL (`trading_trades` + 2 indexes)
- [x] `recordTrade` — inserts row, logs+swallows on failure, skips silently when sql=null
- [x] `listTrades` — camelCase mapping, limit clamp [1..50], returns [] when sql=null
- [x] `formatTradesHtml` — HTML-escaped symbols, BUY/SELL labels, Telegram HTML mode
- [x] `createHistoryHandler` — parses N, defaults to 10, clamps to 50
- [x] Wired into buy/sell via `onTrade` callback pattern (keeps handlers.js clean)
- [x] `/history` registered as public command in index.js
## Tests Status
- Type check: N/A (plain JS)
- Unit tests: **160/160 pass** (21 new in history.test.js)
- Lint: **clean** (Biome + ESLint)
## Design Notes
- `onTrade` callback pattern chosen over passing `sql` directly into handlers — keeps handlers.js unaware of D1, easier to test in isolation.
- `createHistoryHandler` takes `sql` at factory time; `index.js` uses a lazy wrapper `(ctx) => createHistoryHandler(sql)(ctx)` so the module-level `sql` variable (set in `init`) is captured correctly after startup.
- `recordTrade` failure path: try/catch logs `console.error` and returns — portfolio KV remains source of truth.
**Status:** DONE
**Summary:** Phase 03 complete — trade history table, `/history` command, buy/sell wiring, 21 tests all green, lint clean.