mirror of
https://github.com/tiennm99/miti99bot-js.git
synced 2026-06-01 06:13:09 +00:00
5b00cae76e
Implements the KVStore interface against MongoDB Atlas with full behavioral parity vs CFKVStore (null-on-missing, swallow-corrupt-JSON, idempotent delete, throw-on-undefined-putJSON). Not wired into the request path yet — Phase 04 adds dual-write wrappers and factory routing. - src/db/mongo-client.js: memoized MongoClient + getDb(env). On connect() reject, nulls both client and connectPromise so next call retries cleanly (regression-tested). Catches MongoServerSelectionError and emits a structured warning before rethrow so callers can map to 503. - src/db/mongo-kv-store.js: KVStore impl. get/getJSON filter on expiresAt at read time to close the up-to-60s TTL-sweeper stale-read window vs CFKVStore. list() returns keys WITH prefix preserved (parity — wrapper in create-store.js:65 strips). Cursor pagination via sorted _id + limit(N+1), NOT skip(). Lazy ensureIndex per (collection, isolate) tracked in module-scope Set. - src/db/mongo-list-cursor.js: extracted cursor encode/decode to keep mongo-kv-store.js under 200 LOC. - tests/fakes/fake-mongo.js: Map-backed fake covering the surface needed by both Phase 02 (KVStore) and Phase 03 (MongoTradesStore). - tests/db/mongo-kv-store.test.js: 26 tests, including TTL stale-read regression (1s TTL + time advance), 2-level prefix list regression, cursor pagination, connect-reject retry, MongoServerSelectionError structured log. Tests: 503 → 529 (+26). Lint clean.