Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 12 additions & 17 deletions api/v1_tracks_trending_ids.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,18 @@ import (

func (app *ApiServer) getTrendingIds(c *fiber.Ctx, timeRange string, genre string, limit int, offset int) ([]int32, error) {
sql := `
SELECT track_trending_scores.track_id
FROM track_trending_scores
LEFT JOIN tracks
ON tracks.track_id = track_trending_scores.track_id
AND tracks.is_delete = false
AND tracks.is_unlisted = false
AND tracks.is_available = true
WHERE type = 'TRACKS'
AND version = 'pnagD'
AND time_range = @time
AND (@genre = '' OR track_trending_scores.genre = @genre)
ORDER BY
score DESC,
track_id DESC
LIMIT @limit
OFFSET @offset
`
SELECT track_trending_scores.track_id
FROM track_trending_scores
WHERE type = 'TRACKS'
AND version = 'pnagD'
AND time_range = @time
AND (@genre = '' OR track_trending_scores.genre = @genre)
ORDER BY
score DESC,
track_id DESC
LIMIT @limit
OFFSET @offset
`

args := pgx.NamedArgs{}
args["limit"] = limit
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-- Hot trending endpoints order by score desc, track_id desc. The existing
-- ix_trending_scores index has track_id in ascending order, which leaves
-- PostgreSQL doing an incremental sort for every request. Keep API tie-break
-- behavior stable by adding an index whose order matches the query.
CREATE INDEX CONCURRENTLY IF NOT EXISTS ix_trending_scores_desc_tiebreak
ON track_trending_scores (type, version, time_range, score DESC, track_id DESC);
Loading