Compare commits

...

2 Commits

Author SHA1 Message Date
7cb0931329 Leaderboard: Include seasonpickpoints in leaderboard data
All checks were successful
Build Formula11 Docker Image / pocketbase-docker (push) Successful in 37s
2025-12-26 21:38:32 +01:00
db0365adad Lib: Add schema + fetcher for seasonpickpoints table 2025-12-26 21:38:16 +01:00
4 changed files with 70 additions and 5 deletions

View File

@ -18,6 +18,7 @@ import type {
ScrapedTeamStanding,
SeasonPick,
SeasonPickedUser,
SeasonPickPoints,
SeasonPickResult,
Substitution,
Team,
@ -323,6 +324,19 @@ export const fetch_racepickpointstotal = async (
return racepickpointstotal;
};
/**
* Fetch all [SeasonPickPoints] from the database.
*/
export const fetch_seasonpickpoints = async (
fetch: (_: any) => Promise<Response>,
): Promise<SeasonPickPoints[]> => {
const seasonpickpoints: SeasonPickPoints[] = await pb
.collection("seasonpickpoints")
.getFullList({ fetch: fetch });
return seasonpickpoints;
};
/**
* Fetch all [ScrapedDriverStandings] from the database, ordered ascendingly by position.
*/

View File

@ -169,6 +169,19 @@ export interface RacePickPointsTotal {
total_points_per_pick: number;
}
export interface SeasonPickPoints {
id: string;
user: string;
hottake_points: number;
wdc_points: number;
wcc_points: number;
doohan_points: number;
overtakes_points: number;
dnfs_points: number;
teamwinner_points: number;
podium_points: number;
}
// Scraped Data
export interface ScrapedStartingGrid {

View File

@ -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 @@
`<span class='badge variant-filled-surface'>${get_by_value(await data.users, "id", value)?.firstname ?? "Invalid"}</span>`,
},
{
data_value_name: "total_points",
data_value_name: "user",
label: "Total",
valuefun: async (value: string): Promise<string> =>
`<span class='badge variant-filled-surface'>${value}</span>`,
valuefun: async (value: string): Promise<string> => {
let seasonpoints = await data.seasonpickpoints;
let points = get_by_value(await data.racepickpointstotal, "user", value)?.total_points ?? 0;
if (!seasonpoints) {
return `<span class='badge variant-filled-surface'>${points}</span>`;
}
points += calc_season_points(get_by_value(seasonpoints, "user", value)!);
return `<span class='badge variant-filled-surface'>${points}</span>`;
},
},
{
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<string> => {
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",

View File

@ -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),
};
};