Skip to content

Commit 2064122

Browse files
authored
fix(server): /search/random API returns same assets every call (#15682)
* Fix for server searchRandom function not returning random results * Fix lint
1 parent f780a56 commit 2064122

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

server/src/queries/search.repository.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ offset
3636
and "assets"."deletedAt" is null
3737
and "assets"."id" < $6
3838
order by
39-
"assets"."id"
39+
random()
4040
limit
4141
$7
4242
)
@@ -56,7 +56,7 @@ union all
5656
and "assets"."deletedAt" is null
5757
and "assets"."id" > $13
5858
order by
59-
"assets"."id"
59+
random()
6060
limit
6161
$14
6262
)

server/src/repositories/search.repository.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,14 @@ export class SearchRepository implements ISearchRepository {
7272
async searchRandom(size: number, options: AssetSearchOptions): Promise<AssetEntity[]> {
7373
const uuid = randomUUID();
7474
const builder = searchAssetBuilder(this.db, options);
75-
const lessThan = builder.where('assets.id', '<', uuid).orderBy('assets.id').limit(size);
76-
const greaterThan = builder.where('assets.id', '>', uuid).orderBy('assets.id').limit(size);
75+
const lessThan = builder
76+
.where('assets.id', '<', uuid)
77+
.orderBy(sql`random()`)
78+
.limit(size);
79+
const greaterThan = builder
80+
.where('assets.id', '>', uuid)
81+
.orderBy(sql`random()`)
82+
.limit(size);
7783
const { rows } = await sql`${lessThan} union all ${greaterThan} limit ${size}`.execute(this.db);
7884
return rows as any as AssetEntity[];
7985
}

0 commit comments

Comments
 (0)