• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

decentraland / marketplace-server / 30992082307
62%
main: 62%

Build:
Build:
LAST BUILD BRANCH: fix/shop-newest-sort-listing-date
DEFAULT BRANCH: main
Ran 05 Aug 2026 09:12AM UTC
Jobs 1
Files 162
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

05 Aug 2026 09:09AM UTC coverage: 61.667% (+0.2%) from 61.468%
30992082307

push

github

web-flow
feat: sort, credit price range and working isOnSale=false on /v3/catalog/items (#382)

`GET /v3/catalog/items` is already the credit-aware full-catalog feed (every
item, listed or not, with a server-computed `priceCredits`) and already
accepts `creator`, so the Shop can read a creator's whole body of work from
it. Two things stopped it being usable as a browse feed:

1. NO ORDER BY AT ALL. `getItemsParams` never parsed `sortBy` and
   `getCatalogItemsQuery` never sorted. Verified against production — all
   four sorts returned the identical page. The dead sort dropdown was the
   visible symptom; the real hazard is that LIMIT/OFFSET over an unordered
   plan may return a row on two pages, or none. Every branch of the new
   `getCatalogItemsOrderByStatement` ends in `item.id ASC`, so each order is
   TOTAL, not merely deterministic.

2. NO CREDIT-DENOMINATED PRICE RANGE. `minPrice`/`maxPrice` are MANA wei;
   the Shop prices in credits. `minPriceCredits`/`maxPriceCredits` filter on
   the same server-computed expression the rows are priced by, so the filter
   and the displayed price can never disagree.

Not included, on purpose: the `isOnSale=false` fix and the item-name search
that started out in this branch. #383 landed both on main first, and its
versions are better — the COALESCE this branch wrapped the on-sale predicate
in guarded nothing (`available` and the minter flags are NOT NULL, so the
negation is already two-valued), and its ILIKE over the item name replaces a
whole-string trigram filter that scored a short query against a long
description below the threshold, making items unsearchable by their own name.
Where the two overlapped, main wins on every hunk.

Squashed into one signed commit: `main` requires signed commits and the
branch's original commit was unsigned, which is what left the PR BLOCKED with
CI green and the review approved. Same tree, verified byte-identical to the
merge it replaces.

1657 of 3104 branches covered (53.38%)

Branch coverage included in aggregate %.

3018 of 4477 relevant lines covered (67.41%)

25.98 hits per line

Coverage Regressions

Lines Coverage ∆ File
9
70.56
2.69% src/ports/items/queries.ts
6
62.94
5.59% src/controllers/handlers/shop-catalog-handler.ts
Jobs
ID Job ID Ran Files Coverage
1 30992082307.1 05 Aug 2026 09:12AM UTC 324
63.66
GitHub Action Run
Source Files on build 30992082307
  • Tree
  • List 162
  • Changed 127
  • Source Changed 3
  • Coverage Changed 127
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30992082307
  • 5d8384d9 on github
  • Prev Build on main (#30962927969)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc