📌 Description
routes/liquidity.ts's GET /entries calls service.listEntries() unfiltered, returning every raw per-anchor liquidity entry across all assets. liquidityRepository.ts already exposes a byAsset(asset) method used internally by quoteService, but there is no way for an API client to filter entries by asset the same way GET /api/v1/liquidity/:asset already filters pools by asset.
🧩 Requirements and context
- Accept an optional
?asset= query param on GET /api/v1/liquidity/entries, normalized via normalizeAsset from utils/validation.ts.
- When provided, return only entries matching that asset; when omitted, preserve current unfiltered behavior.
- Add a corresponding
LiquidityService.listEntries(filters?: { asset?: string }) overload/parameter rather than filtering in the route handler directly, matching the existing services-own-the-rules pattern used elsewhere.
🛠️ Suggested execution
- Modify
src/services/liquidityService.ts's listEntries to accept an optional asset filter and delegate to this.repo.byAsset(asset) when present.
- Modify
src/routes/liquidity.ts's GET /entries handler to pass req.query.asset through.
- Update
src/openapi.ts's /api/v1/liquidity/entries entry to document the new parameter.
- Add tests in
src/services/liquidityService.test.ts and src/routes/liquidity.test.ts.
✅ Acceptance criteria
🔒 Security notes
N/A — read-only filter over data already fully exposed by the unfiltered endpoint.
📋 Guidelines
- Minimum 95% test coverage
- Clear documentation
- Timeframe: 96 hours
📌 Description
routes/liquidity.ts'sGET /entriescallsservice.listEntries()unfiltered, returning every raw per-anchor liquidity entry across all assets.liquidityRepository.tsalready exposes abyAsset(asset)method used internally byquoteService, but there is no way for an API client to filter entries by asset the same wayGET /api/v1/liquidity/:assetalready filters pools by asset.🧩 Requirements and context
?asset=query param onGET /api/v1/liquidity/entries, normalized vianormalizeAssetfromutils/validation.ts.LiquidityService.listEntries(filters?: { asset?: string })overload/parameter rather than filtering in the route handler directly, matching the existing services-own-the-rules pattern used elsewhere.🛠️ Suggested execution
src/services/liquidityService.ts'slistEntriesto accept an optional asset filter and delegate tothis.repo.byAsset(asset)when present.src/routes/liquidity.ts'sGET /entrieshandler to passreq.query.assetthrough.src/openapi.ts's/api/v1/liquidity/entriesentry to document the new parameter.src/services/liquidityService.test.tsandsrc/routes/liquidity.test.ts.✅ Acceptance criteria
GET /api/v1/liquidity/entries?asset=usdcreturns only USDC entries (case-insensitive, normalized).?asset=returns every entry as before.🔒 Security notes
N/A — read-only filter over data already fully exposed by the unfiltered endpoint.
📋 Guidelines