mirror of
https://github.com/tiennm99/miti99bot.git
synced 2026-04-17 13:21:31 +00:00
39 lines
2.1 KiB
Markdown
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.
|