Skip to content

Commit a8c2a0c

Browse files
committed
feat: split the main catalog query into count and main one with sort
1 parent 8e72f32 commit a8c2a0c

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

src/ports/catalog/component.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ import { enhanceItemsWithPicksStats } from '../../logic/favorites/utils'
77
import { HttpError } from '../../logic/http/response'
88
import { AppComponents } from '../../types'
99
import { formatQueryForLogging } from '../utils'
10-
import { getCollectionsItemsCatalogQuery, getCollectionsItemsCatalogQueryWithTrades, getItemIdsBySearchTextQuery } from './queries'
10+
import {
11+
getCollectionsItemsCatalogQuery,
12+
getCollectionsItemsCatalogQueryWithTrades,
13+
getCollectionsItemsCountQuery,
14+
getItemIdsBySearchTextQuery
15+
} from './queries'
1116
import { CatalogOptions, CollectionsItemDBResult, ICatalogComponent } from './types'
1217
import { fromCollectionsItemDbResultToCatalogItem } from './utils'
1318

@@ -62,9 +67,13 @@ export async function createCatalogComponent(
6267
}
6368
}
6469
query = isV2 ? getCollectionsItemsCatalogQueryWithTrades(filters) : getCollectionsItemsCatalogQuery(filters)
65-
const results = await client.query<CollectionsItemDBResult>(query)
66-
catalogItems = results.rows.map(res => fromCollectionsItemDbResultToCatalogItem(res, network))
67-
total = results.rows[0]?.total ?? results.rows[0]?.total_rows ?? 0
70+
const totalQuery = getCollectionsItemsCountQuery(filters)
71+
const [items, totalItems] = await Promise.all([
72+
client.query<CollectionsItemDBResult>(query),
73+
client.query<{ total: number }>(totalQuery)
74+
])
75+
catalogItems = items.rows.map(res => fromCollectionsItemDbResultToCatalogItem(res, network))
76+
total = totalItems.rows[0]?.total ?? 0
6877

6978
const pickStats = await picks.getPicksStats(
7079
catalogItems.map(({ id }) => id),

src/ports/catalog/queries.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,27 @@ const getTopNItemsCTE = (filters: CatalogQueryFilters) => {
703703
return SQL``
704704
}
705705

706+
export const getCollectionsItemsCountQuery = (filters: CatalogQueryFilters) => {
707+
return SQL``
708+
.append(getTradesCTE())
709+
.append(getNFTsWithOrdersCTE(filters))
710+
.append(
711+
SQL`
712+
SELECT COUNT(*) as total
713+
FROM `
714+
)
715+
.append(MARKETPLACE_SQUID_SCHEMA)
716+
.append(SQL`.item AS items`)
717+
.append(filters.isOnSale === false ? getOwnersJoin() : SQL``)
718+
.append(
719+
SQL`
720+
LEFT JOIN nfts_with_orders ON nfts_with_orders.item_id = items.id`
721+
)
722+
.append(getMetadataJoins())
723+
.append(getTradesJoin())
724+
.append(getCollectionsQueryWhere(filters, true))
725+
}
726+
706727
export const getCollectionsItemsCatalogQueryWithTrades = (filters: CatalogQueryFilters) => {
707728
const query = SQL``
708729
.append(getTradesCTE())
@@ -711,7 +732,6 @@ export const getCollectionsItemsCatalogQueryWithTrades = (filters: CatalogQueryF
711732
.append(
712733
SQL`
713734
SELECT
714-
COUNT(*) OVER() as total_rows,
715735
items.id,
716736
items.blockchain_id,
717737
items.search_is_collection_approved,

0 commit comments

Comments
 (0)