From 0d9f8d0d0183709c0858fa8b326ef0c93857ecf2 Mon Sep 17 00:00:00 2001 From: Dominic Ferrando Date: Fri, 10 Jul 2026 14:05:53 -0400 Subject: [PATCH] Add ability to view source for datasets --- .../database/seed-data/standards-config.json | 20 +- apps/api/src/server.ts | 6 + apps/api/src/services/standards.ts | 8 + .../src/lib/components/StandardsTable.svelte | 16 +- apps/portal/src/routes/(app)/+layout.svelte | 5 +- .../calculator/configurations/+page.svelte | 4 +- .../(app)/calculator/datasets/+page.svelte | 287 ++++++++++++++++++ packages/calculator/src/models.ts | 1 + 8 files changed, 333 insertions(+), 14 deletions(-) create mode 100644 apps/portal/src/routes/(app)/calculator/datasets/+page.svelte diff --git a/apps/api/src/database/seed-data/standards-config.json b/apps/api/src/database/seed-data/standards-config.json index 3f40b18..a53af8f 100644 --- a/apps/api/src/database/seed-data/standards-config.json +++ b/apps/api/src/database/seed-data/standards-config.json @@ -66,7 +66,7 @@ }, "ConeDrill": { "enableGeneration": true, - "weightModifier": -0.1, + "weightModifier": 0.1, "weightSkew": 0, "ageModifier": -0.25, "difficultyModifier": 0.15, @@ -84,7 +84,8 @@ "attribute": "Strength", "generators": [], "unit": "kg", - "name": "Squat" + "name": "Squat", + "source": "http://lonkilgore.com/resources/Lon_Kilgore_Strength_Standard_Tables-Copyright-2023.pdf" }, "standards": [ { @@ -1662,7 +1663,8 @@ "attribute": "Strength", "generators": [], "unit": "kg", - "name": "Deadlift" + "name": "Deadlift", + "source": "http://lonkilgore.com/resources/Lon_Kilgore_Strength_Standard_Tables-Copyright-2023.pdf" }, "standards": [ { @@ -3240,7 +3242,8 @@ "attribute": "Strength", "generators": [], "unit": "kg", - "name": "Bench Press" + "name": "Bench Press", + "source": "http://lonkilgore.com/resources/Lon_Kilgore_Strength_Standard_Tables-Copyright-2023.pdf" }, "standards": [ { @@ -4822,7 +4825,8 @@ } ], "unit": "ms", - "name": "Mile Run" + "name": "Mile Run", + "source": "https://runninglevel.com/running-times/1-mile-times" }, "standards": [ { @@ -5315,7 +5319,8 @@ } ], "unit": "cm", - "name": "Broad Jump" + "name": "Broad Jump", + "source": "https://nrpt.co.uk/training/tests/power/broad.htm" }, "standards": [ { @@ -5360,7 +5365,8 @@ } ], "unit": "ms", - "name": "3 Cone Drill" + "name": "3 Cone Drill", + "source": "https://nflsavant.com/combine.php" }, "standards": [ { diff --git a/apps/api/src/server.ts b/apps/api/src/server.ts index f268317..f4e96bc 100644 --- a/apps/api/src/server.ts +++ b/apps/api/src/server.ts @@ -168,6 +168,12 @@ export const app = new Elysia() }, { params: t.Object({ id: t.String() }) }) + .patch("/datasets/:id", async ({ params: { id }, body: { name } }) => { + await s.Standards.Datasets.update(id, name); + }, { + params: t.Object({ id: t.String() }), + body: t.Object({ name: t.String() }) + }) ) // COMMERCE diff --git a/apps/api/src/services/standards.ts b/apps/api/src/services/standards.ts index 2ace0cc..d68b006 100644 --- a/apps/api/src/services/standards.ts +++ b/apps/api/src/services/standards.ts @@ -91,4 +91,12 @@ class StandardsDatasetService { Value.Assert(StandardsDataSchema, result.data); return { id: result.id, name: result.name, data: result.data }; } + + async update(id: string, name: string) { + const result = await db.updateTable("standards_datasets") + .set({ name }) + .where("id", "=", id) + .execute(); + if (result[0]?.numUpdatedRows === 0n) throw new Error(`No dataset with id "${id}"`); + } } diff --git a/apps/portal/src/lib/components/StandardsTable.svelte b/apps/portal/src/lib/components/StandardsTable.svelte index df74274..8c0e669 100644 --- a/apps/portal/src/lib/components/StandardsTable.svelte +++ b/apps/portal/src/lib/components/StandardsTable.svelte @@ -23,6 +23,10 @@ const { selected, allStandards }: Props = $props(); + const activityMetadata = $derived( + allStandards.byActivity(selected.activity).getMetadata(), + ); + const getLvlValue = ( activity: Activity, standard: Standard, @@ -57,10 +61,16 @@
-

- {allStandards.byActivity(selected.activity).getMetadata().name} -

+

{activityMetadata.name}

+

+ View source +

{#if !selected.metrics.age} diff --git a/apps/portal/src/routes/(app)/+layout.svelte b/apps/portal/src/routes/(app)/+layout.svelte index 80255b5..55b178e 100644 --- a/apps/portal/src/routes/(app)/+layout.svelte +++ b/apps/portal/src/routes/(app)/+layout.svelte @@ -7,7 +7,10 @@ { name: "Calculator", path: "/calculator", - links: [{ name: "Configurations", path: "/configurations" }], + links: [ + { name: "Configurations", path: "/configurations" }, + { name: "Datasets", path: "/datasets" }, + ], }, { name: "Commerce", diff --git a/apps/portal/src/routes/(app)/calculator/configurations/+page.svelte b/apps/portal/src/routes/(app)/calculator/configurations/+page.svelte index ecbd1b9..6f5d77a 100644 --- a/apps/portal/src/routes/(app)/calculator/configurations/+page.svelte +++ b/apps/portal/src/routes/(app)/calculator/configurations/+page.svelte @@ -167,8 +167,6 @@ if (!editor) return; const name = nameOverride ?? editor.name; if (!name) return; - if (mode === "update" && editor.configId && editor.configId === liveConfigId) - return; const target = editor; saveError = null; saving = true; @@ -398,7 +396,7 @@ + + + + {#if saveError} + + {/if} + +
+
+ + +
+
+ +
+ +
+ + + +
+ + +{/if} diff --git a/packages/calculator/src/models.ts b/packages/calculator/src/models.ts index ad2b4d9..ddc3508 100644 --- a/packages/calculator/src/models.ts +++ b/packages/calculator/src/models.ts @@ -43,6 +43,7 @@ export const StandardsDataSchema = t.Record( generators: t.Array(GeneratorSchema), unit: t.Union([t.Literal("ms"), t.Literal("cm"), t.Literal("kg")]), name: t.String(), + source: t.String() }), standards: t.Array(StandardSchema), }),