made triple events go off of the highest score instead of the average
This commit is contained in:
1
TODO.md
1
TODO.md
@@ -12,7 +12,6 @@ ledger view
|
|||||||
inserting manually into ledger
|
inserting manually into ledger
|
||||||
|
|
||||||
# Database - HIGH PRIORITY
|
# Database - HIGH PRIORITY
|
||||||
make events score based off of highest score instead of avg
|
|
||||||
load results from the excel sheet i made
|
load results from the excel sheet i made
|
||||||
export whole contest results to csv
|
export whole contest results to csv
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
presetName,numberOfResults,unit,lowerIsBetter,averageResults
|
presetName,numberOfResults,unit,lowerIsBetter,averageResults
|
||||||
default,1,m,0,0
|
default,1,m,0,0
|
||||||
three,3,m,0,1
|
three,3,m,0,0
|
||||||
race,1,s,1,0
|
race,1,s,1,0
|
||||||
|
|||||||
|
@@ -57,6 +57,7 @@ export async function POST({ request }: any) {
|
|||||||
|
|
||||||
for (let result in currentPlayer.scores) {
|
for (let result in currentPlayer.scores) {
|
||||||
let currentResult = currentPlayer.scores[result];
|
let currentResult = currentPlayer.scores[result];
|
||||||
|
if (currentResult === null || currentResult === undefined) continue;
|
||||||
let newScoreEntry = await db
|
let newScoreEntry = await db
|
||||||
.insert(schema.registeredResults)
|
.insert(schema.registeredResults)
|
||||||
.values({
|
.values({
|
||||||
|
|||||||
@@ -75,10 +75,10 @@
|
|||||||
return valid.reduce((a, b) => a + b, 0) / valid.length;
|
return valid.reduce((a, b) => a + b, 0) / valid.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function best(scores: (number | null)[], fallback = Infinity): number {
|
function best(scores: (number | null)[], lowerIsBetter: boolean, fallback = Infinity): number {
|
||||||
const valid = scores.filter((s): s is number => s !== null);
|
const valid = scores.filter((s): s is number => s !== null);
|
||||||
if (valid.length === 0) return fallback;
|
if (valid.length === 0) return fallback;
|
||||||
return Math.min(...valid);
|
return lowerIsBetter ? Math.min(...valid) : Math.max(...valid);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPoints(placement: number): number {
|
function getPoints(placement: number): number {
|
||||||
@@ -106,10 +106,10 @@
|
|||||||
const fallback = lowerIsBetter ? Infinity : -Infinity;
|
const fallback = lowerIsBetter ? Infinity : -Infinity;
|
||||||
const sa = useAverage
|
const sa = useAverage
|
||||||
? average(committedScores[a.id] ?? [], fallback)
|
? average(committedScores[a.id] ?? [], fallback)
|
||||||
: best(committedScores[a.id] ?? [], fallback);
|
: best(committedScores[a.id] ?? [], lowerIsBetter, fallback);
|
||||||
const sb = useAverage
|
const sb = useAverage
|
||||||
? average(committedScores[b.id] ?? [], fallback)
|
? average(committedScores[b.id] ?? [], fallback)
|
||||||
: best(committedScores[b.id] ?? [], fallback);
|
: best(committedScores[b.id] ?? [], lowerIsBetter, fallback);
|
||||||
|
|
||||||
return lowerIsBetter ? sa - sb : sb - sa;
|
return lowerIsBetter ? sa - sb : sb - sa;
|
||||||
})
|
})
|
||||||
@@ -229,7 +229,9 @@
|
|||||||
position: i + 1,
|
position: i + 1,
|
||||||
points: getPoints(i + 1),
|
points: getPoints(i + 1),
|
||||||
scores: committedScores[p.id] ?? [],
|
scores: committedScores[p.id] ?? [],
|
||||||
average: average(committedScores[p.id] ?? [])
|
summaryValue: useAverage
|
||||||
|
? average(committedScores[p.id] ?? [])
|
||||||
|
: best(committedScores[p.id] ?? [], lowerIsBetter)
|
||||||
}))
|
}))
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
@@ -309,6 +311,12 @@
|
|||||||
validScores.length > 0
|
validScores.length > 0
|
||||||
? validScores.reduce((a, b) => a + b, 0) / validScores.length
|
? validScores.reduce((a, b) => a + b, 0) / validScores.length
|
||||||
: 0}
|
: 0}
|
||||||
|
{@const bestScore =
|
||||||
|
validScores.length > 0
|
||||||
|
? lowerIsBetter
|
||||||
|
? Math.min(...validScores)
|
||||||
|
: Math.max(...validScores)
|
||||||
|
: 0}
|
||||||
<div
|
<div
|
||||||
animate:flip={{ duration: 300 }}
|
animate:flip={{ duration: 300 }}
|
||||||
class="scoring-player-card"
|
class="scoring-player-card"
|
||||||
@@ -362,6 +370,10 @@
|
|||||||
<div class="text-sm opacity-60">
|
<div class="text-sm opacity-60">
|
||||||
avg: {avgScore.toFixed(2)}
|
avg: {avgScore.toFixed(2)}
|
||||||
</div>
|
</div>
|
||||||
|
{:else if numResults > 1}
|
||||||
|
<div class="text-sm opacity-60">
|
||||||
|
best: {bestScore.toFixed(2)}
|
||||||
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{:else if player.playerScores.length > 0}
|
{:else if player.playerScores.length > 0}
|
||||||
{#each player.playerScores as score}
|
{#each player.playerScores as score}
|
||||||
@@ -378,6 +390,7 @@
|
|||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{#if event.state == 1}
|
||||||
<button
|
<button
|
||||||
class="mt-4 rounded px-6 py-2 text-white"
|
class="mt-4 rounded px-6 py-2 text-white"
|
||||||
class:bg-green-600={submitStatus === 'idle'}
|
class:bg-green-600={submitStatus === 'idle'}
|
||||||
@@ -392,6 +405,7 @@
|
|||||||
{:else if submitStatus === 'done'}Submitted ✓
|
{:else if submitStatus === 'done'}Submitted ✓
|
||||||
{:else}Error — Retry{/if}
|
{:else}Error — Retry{/if}
|
||||||
</button>
|
</button>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user