This commit is contained in:
@@ -161,6 +161,16 @@ export function createListingRepository(db) {
|
||||
}
|
||||
|
||||
const offset = (page - 1) * limit;
|
||||
const marketValue = sql`COALESCE(
|
||||
(SELECT ${marketValueOverrides.valueMinor}
|
||||
FROM ${marketValueOverrides}
|
||||
WHERE ${marketValueOverrides.inventoryItemId} = ${inventoryItems.id}
|
||||
ORDER BY ${marketValueOverrides.createdAt} DESC LIMIT 1),
|
||||
(SELECT ${marketValuations.valueMinor}
|
||||
FROM ${marketValuations}
|
||||
WHERE ${marketValuations.inventoryItemId} = ${inventoryItems.id}
|
||||
ORDER BY ${marketValuations.calculatedAt} DESC LIMIT 1)
|
||||
)`;
|
||||
const sortOrder =
|
||||
sort === "updated"
|
||||
? desc(listings.updatedAt)
|
||||
@@ -168,6 +178,10 @@ export function createListingRepository(db) {
|
||||
? products.name
|
||||
: sort === "name_desc"
|
||||
? desc(products.name)
|
||||
: sort === "market_low"
|
||||
? sql`${marketValue} ASC NULLS LAST`
|
||||
: sort === "market_high"
|
||||
? sql`${marketValue} DESC NULLS LAST`
|
||||
: sort === "price_low"
|
||||
? listings.askingPriceMinor
|
||||
: sort === "price_high"
|
||||
|
||||
@@ -67,8 +67,8 @@ export function createSearchQuery({
|
||||
throw new Error("minPriceMinor must be <= maxPriceMinor");
|
||||
}
|
||||
|
||||
if (!["recent", "updated", "name_asc", "name_desc", "price_low", "price_high"].includes(sort)) {
|
||||
throw new Error("sort must be recent, updated, name_asc, name_desc, price_low, or price_high");
|
||||
if (!["recent", "updated", "name_asc", "name_desc", "price_low", "price_high", "market_low", "market_high"].includes(sort)) {
|
||||
throw new Error("sort must be recent, updated, name_asc, name_desc, price_low, price_high, market_low, or market_high");
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -66,6 +66,8 @@ test("accepts only the supported public search sort values", () => {
|
||||
assert.equal(createSearchQuery({ sort: "updated" }).sort, "updated");
|
||||
assert.equal(createSearchQuery({ sort: "name_asc" }).sort, "name_asc");
|
||||
assert.equal(createSearchQuery({ sort: "name_desc" }).sort, "name_desc");
|
||||
assert.equal(createSearchQuery({ sort: "market_low" }).sort, "market_low");
|
||||
assert.equal(createSearchQuery({ sort: "market_high" }).sort, "market_high");
|
||||
assert.throws(
|
||||
() => createSearchQuery({ sort: "random" }),
|
||||
/sort must be recent/,
|
||||
|
||||
Reference in New Issue
Block a user