diff --git a/backend/routers/techniques.py b/backend/routers/techniques.py index 6f0944b..36f19bd 100644 --- a/backend/routers/techniques.py +++ b/backend/routers/techniques.py @@ -33,6 +33,7 @@ router = APIRouter(prefix="/techniques", tags=["techniques"]) async def list_techniques( category: Annotated[str | None, Query()] = None, creator_slug: Annotated[str | None, Query()] = None, + sort: Annotated[str, Query()] = "recent", offset: Annotated[int, Query(ge=0)] = 0, limit: Annotated[int, Query(ge=1, le=100)] = 50, db: AsyncSession = Depends(get_session), @@ -72,7 +73,12 @@ async def list_techniques( Creator.slug == creator_slug ) - stmt = stmt.options(selectinload(TechniquePage.creator)).order_by(TechniquePage.created_at.desc()).offset(offset).limit(limit) + stmt = stmt.options(selectinload(TechniquePage.creator)) + if sort == "random": + stmt = stmt.order_by(func.random()) + else: + stmt = stmt.order_by(TechniquePage.created_at.desc()) + stmt = stmt.offset(offset).limit(limit) result = await db.execute(stmt) rows = result.all() diff --git a/frontend/src/api/public-client.ts b/frontend/src/api/public-client.ts index 254ea2a..04d03af 100644 --- a/frontend/src/api/public-client.ts +++ b/frontend/src/api/public-client.ts @@ -218,6 +218,7 @@ export interface TechniqueListParams { offset?: number; category?: string; creator_slug?: string; + sort?: string; } export async function fetchTechniques( @@ -228,6 +229,7 @@ export async function fetchTechniques( if (params.offset !== undefined) qs.set("offset", String(params.offset)); if (params.category) qs.set("category", params.category); if (params.creator_slug) qs.set("creator_slug", params.creator_slug); + if (params.sort) qs.set("sort", params.sort); const query = qs.toString(); return request( `${BASE}/techniques${query ? `?${query}` : ""}`,