feat(discovery): trending sort heuristic over world_visits with decay weighting

This commit is contained in:
2026-09-15 20:59:46 +00:00
parent 77d4ea5669
commit 6684578701
3 changed files with 152 additions and 1 deletions
+15 -1
View File
@@ -16,6 +16,8 @@ from app.database import get_db
from app.dependencies import OptionalUser
from app.models.world import World, WorldVisibility
from app.models.world_visit import WorldVisit
from app.services.trending import get_trending_subquery
router = APIRouter()
@@ -208,11 +210,23 @@ async def list_discovery_worlds(
total = (await db.execute(count_query)).scalar_one()
# Sort
if sort == "most_played":
if sort == "trending":
trending_subq = get_trending_subquery()
base_query = (
base_query
.outerjoin(trending_subq, World.id == trending_subq.c.trending_world_id)
.order_by(
func.coalesce(trending_subq.c.trending_score, 0.0).desc(),
World.play_count.desc(),
World.created_at.desc(),
)
)
elif sort == "most_played":
base_query = base_query.order_by(World.play_count.desc(), World.created_at.desc())
else: # default: newest
base_query = base_query.order_by(World.created_at.desc())
# Pagination & load owner
query = (
base_query