diff --git a/src/routes/leaderboard/+page.svelte b/src/routes/leaderboard/+page.svelte
index fa1b95c..695f2bd 100644
--- a/src/routes/leaderboard/+page.svelte
+++ b/src/routes/leaderboard/+page.svelte
@@ -2,7 +2,7 @@
import { make_chart_options } from "$lib/chart";
import { Table, type TableColumn } from "$lib/components";
import { get_by_value } from "$lib/database";
- import type { RacePickPoints, RacePickPointsAcc, User } from "$lib/schema";
+ import type { RacePickPoints, RacePickPointsAcc, SeasonPickPoints, User } from "$lib/schema";
import type { PageData } from "./$types";
import {
LineChart,
@@ -24,6 +24,22 @@
let racepickpointsacc: RacePickPointsAcc[] | undefined = $state(undefined);
data.racepickpointsacc.then((r: RacePickPointsAcc[]) => (racepickpointsacc = r));
+ let seasonpickpoints: SeasonPickPoints[] | undefined = $state(undefined);
+ data.seasonpickpoints.then((p: SeasonPickPoints[]) => (seasonpickpoints = p));
+
+ const calc_season_points = (p: SeasonPickPoints): number => {
+ return (
+ p.hottake_points +
+ p.wdc_points +
+ p.wcc_points +
+ p.overtakes_points +
+ p.dnfs_points +
+ p.teamwinner_points +
+ p.podium_points +
+ p.doohan_points
+ );
+ };
+
const leaderboard_columns: TableColumn[] = $derived([
{
data_value_name: "user",
@@ -32,10 +48,18 @@
`${get_by_value(await data.users, "id", value)?.firstname ?? "Invalid"}`,
},
{
- data_value_name: "total_points",
+ data_value_name: "user",
label: "Total",
- valuefun: async (value: string): Promise =>
- `${value}`,
+ valuefun: async (value: string): Promise => {
+ let seasonpoints = await data.seasonpickpoints;
+ let points = get_by_value(await data.racepickpointstotal, "user", value)?.total_points ?? 0;
+ if (!seasonpoints) {
+ return `${points}`;
+ }
+
+ points += calc_season_points(get_by_value(seasonpoints, "user", value)!);
+ return `${points}`;
+ },
},
{
data_value_name: "total_pxx_points",
@@ -45,6 +69,18 @@
data_value_name: "total_dnf_points",
label: "DNF",
},
+ {
+ data_value_name: "user",
+ label: "Season",
+ valuefun: async (value: string): Promise => {
+ if (!seasonpickpoints) {
+ return "";
+ }
+
+ let p = seasonpickpoints.filter((p: SeasonPickPoints) => p.user === value)[0];
+ return calc_season_points(p).toString();
+ },
+ },
{
data_value_name: "total_points_per_pick",
label: "Per Pick",
diff --git a/src/routes/leaderboard/+page.ts b/src/routes/leaderboard/+page.ts
index 34b8391..6bf0107 100644
--- a/src/routes/leaderboard/+page.ts
+++ b/src/routes/leaderboard/+page.ts
@@ -3,16 +3,18 @@ import {
fetch_racepickpoints,
fetch_racepickpointsacc,
fetch_racepickpointstotal,
+ fetch_seasonpickpoints,
} from "$lib/fetch";
import type { PageLoad } from "../$types";
export const load: PageLoad = async ({ fetch, depends }) => {
- depends("data:users", "data:raceresults");
+ depends("data:users", "data:raceresults", "data:seasonpickresults");
return {
users: fetch_users(fetch),
racepickpoints: fetch_racepickpoints(fetch),
racepickpointsacc: fetch_racepickpointsacc(fetch),
racepickpointstotal: fetch_racepickpointstotal(fetch),
+ seasonpickpoints: fetch_seasonpickpoints(fetch),
};
};