From 9cbef2064489d71c55d12b8d2992056b93af0fce Mon Sep 17 00:00:00 2001 From: Shaheed Azaad Date: Tue, 11 Nov 2025 00:11:03 +0100 Subject: [PATCH] added randomisation --- package-lock.json | 18 +++++++++++++++++- package.json | 3 ++- src/routes/participate/+page.server.js | 8 +++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b9596ab..7b40857 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,8 @@ "@sveltejs/adapter-node": "^5.2.13", "chart.js": "^4.5.0", "drizzle-orm": "^0.40.0", - "exceljs": "^4.4.0" + "exceljs": "^4.4.0", + "knuth-shuffle-seeded": "^1.0.6" }, "devDependencies": { "@eslint/compat": "^1.2.5", @@ -6462,6 +6463,15 @@ "dev": true, "license": "MIT" }, + "node_modules/knuth-shuffle-seeded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", + "license": "Apache-2.0", + "dependencies": { + "seed-random": "~2.2.0" + } + }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -7750,6 +7760,12 @@ "node": ">=10" } }, + "node_modules/seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", + "license": "MIT" + }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", diff --git a/package.json b/package.json index 07e784d..642f47b 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@sveltejs/adapter-node": "^5.2.13", "chart.js": "^4.5.0", "drizzle-orm": "^0.40.0", - "exceljs": "^4.4.0" + "exceljs": "^4.4.0", + "knuth-shuffle-seeded": "^1.0.6" } } diff --git a/src/routes/participate/+page.server.js b/src/routes/participate/+page.server.js index 8b7f1f3..6ad2515 100644 --- a/src/routes/participate/+page.server.js +++ b/src/routes/participate/+page.server.js @@ -4,6 +4,7 @@ import { inviteLink, participant, audioFile, rating, overallRating } from '$lib/ import { eq, isNull, and, inArray } from 'drizzle-orm'; import { parseStoredTags, matchesInviteTags } from '$lib/server/tag-utils.js'; import { env } from '$env/dynamic/private'; +import shuffle from 'knuth-shuffle-seeded'; export async function load({ url, cookies }) { const token = url.searchParams.get('token'); @@ -81,7 +82,7 @@ export async function load({ url, cookies }) { .from(audioFile) .where(isNull(audioFile.deletedAt)); // Only show active audio files - const filteredAudio = audioRows + const baseAudioList = audioRows .map((audio) => ({ data: { id: audio.id, @@ -96,6 +97,11 @@ export async function load({ url, cookies }) { .filter(({ tags }) => matchesInviteTags(tags, inviteTags)) .map(({ data }) => data); + const shuffleSeed = participantId || token; + const filteredAudio = baseAudioList.length > 0 + ? shuffle([...baseAudioList], shuffleSeed) + : baseAudioList; + const allowedAudioIds = filteredAudio.map((file) => file.id); const displayContinuousRating = env.DISPLAY_CONT_RATING !== 'false';