Compare commits
3 Commits
5cf7974a79
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
ba307eb4c4
|
|||
|
7cb0931329
|
|||
|
db0365adad
|
@ -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.
|
||||
*/
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -2,7 +2,13 @@
|
||||
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,
|
||||
RacePickPointsTotal,
|
||||
SeasonPickPoints,
|
||||
User,
|
||||
} from "$lib/schema";
|
||||
import type { PageData } from "./$types";
|
||||
import {
|
||||
LineChart,
|
||||
@ -24,6 +30,42 @@
|
||||
let racepickpointsacc: RacePickPointsAcc[] | undefined = $state(undefined);
|
||||
data.racepickpointsacc.then((r: RacePickPointsAcc[]) => (racepickpointsacc = r));
|
||||
|
||||
let racepickpointstotal: RacePickPointsTotal[] | undefined = $state(undefined);
|
||||
let seasonpickpoints: SeasonPickPoints[] | undefined = $state(undefined);
|
||||
Promise.all([data.racepickpointstotal, data.seasonpickpoints]).then(
|
||||
([rpp, spp]: [RacePickPointsTotal[], SeasonPickPoints[]]) => {
|
||||
if (spp.length === 0 || !spp) {
|
||||
racepickpointstotal = rpp;
|
||||
seasonpickpoints = undefined;
|
||||
return;
|
||||
}
|
||||
|
||||
racepickpointstotal = rpp.sort((a: RacePickPointsTotal, b: RacePickPointsTotal) => {
|
||||
let apoints = spp.filter((p: SeasonPickPoints) => p.user === a.user)[0];
|
||||
let bpoints = spp.filter((p: SeasonPickPoints) => p.user === b.user)[0];
|
||||
return (
|
||||
b.total_points +
|
||||
calc_season_points(bpoints) -
|
||||
(a.total_points + calc_season_points(apoints))
|
||||
);
|
||||
});
|
||||
seasonpickpoints = spp;
|
||||
},
|
||||
);
|
||||
|
||||
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 +74,22 @@
|
||||
`<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> => {
|
||||
if (!racepickpointstotal) {
|
||||
return "ERR";
|
||||
}
|
||||
|
||||
// let seasonpoints = await data.seasonpickpoints;
|
||||
let points = get_by_value(racepickpointstotal, "user", value)?.total_points ?? 0;
|
||||
if (!seasonpickpoints) {
|
||||
return `<span class='badge variant-filled-surface'>${points}</span>`;
|
||||
}
|
||||
|
||||
points += calc_season_points(get_by_value(seasonpickpoints, "user", value)!);
|
||||
return `<span class='badge variant-filled-surface'>${points}</span>`;
|
||||
},
|
||||
},
|
||||
{
|
||||
data_value_name: "total_pxx_points",
|
||||
@ -45,6 +99,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",
|
||||
@ -90,7 +156,7 @@
|
||||
</div>
|
||||
|
||||
<div class="mt-2">
|
||||
{#await data.racepickpointstotal then racepickpointstotal}
|
||||
{#if racepickpointstotal}
|
||||
<Table data={racepickpointstotal} columns={leaderboard_columns} />
|
||||
{/await}
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
@ -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),
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user