trying to add score updates

This commit is contained in:
2026-05-06 20:00:30 +01:00
parent 94c139c7b8
commit fdfbd4c7c7
7 changed files with 32 additions and 642 deletions

View File

@@ -1,605 +0,0 @@
{
"id": "00000000-0000-0000-0000-000000000000",
"prevId": "",
"version": "6",
"dialect": "sqlite",
"tables": {
"divisions": {
"name": "divisions",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"name": {
"autoincrement": false,
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"eventAttributions": {
"name": "eventAttributions",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"eventID": {
"autoincrement": false,
"name": "eventID",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"playerID": {
"autoincrement": false,
"name": "playerID",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"placement": {
"default": 0,
"autoincrement": false,
"name": "placement",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"eventAttributions_placement_scoringPresets_placement_fk": {
"name": "eventAttributions_placement_scoringPresets_placement_fk",
"tableFrom": "eventAttributions",
"tableTo": "scoringPresets",
"columnsFrom": [
"placement"
],
"columnsTo": [
"placement"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"eventAttributions_playerID_players_id_fk": {
"name": "eventAttributions_playerID_players_id_fk",
"tableFrom": "eventAttributions",
"tableTo": "players",
"columnsFrom": [
"playerID"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"eventAttributions_eventID_events_id_fk": {
"name": "eventAttributions_eventID_events_id_fk",
"tableFrom": "eventAttributions",
"tableTo": "events",
"columnsFrom": [
"eventID"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"events": {
"name": "events",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"name": {
"autoincrement": false,
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"preset": {
"autoincrement": false,
"name": "preset",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"division": {
"autoincrement": false,
"name": "division",
"type": "text",
"primaryKey": false,
"notNull": true
},
"order": {
"autoincrement": false,
"name": "order",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"state": {
"default": 0,
"autoincrement": false,
"name": "state",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"timeCompleted": {
"autoincrement": false,
"name": "timeCompleted",
"type": "integer",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"events_division_divisions_id_fk": {
"name": "events_division_divisions_id_fk",
"tableFrom": "events",
"tableTo": "divisions",
"columnsFrom": [
"division"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"events_preset_scoringPresets_preset_fk": {
"name": "events_preset_scoringPresets_preset_fk",
"tableFrom": "events",
"tableTo": "scoringPresets",
"columnsFrom": [
"preset"
],
"columnsTo": [
"preset"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"ledger": {
"name": "ledger",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"timestamp": {
"default": "(unixepoch())",
"autoincrement": false,
"name": "timestamp",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"type": {
"default": "'event'",
"autoincrement": false,
"name": "type",
"type": "text",
"primaryKey": false,
"notNull": true
},
"event": {
"autoincrement": false,
"name": "event",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"scorer": {
"autoincrement": false,
"name": "scorer",
"type": "text",
"primaryKey": false,
"notNull": false
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"ledger_scorer_scorers_id_fk": {
"name": "ledger_scorer_scorers_id_fk",
"tableFrom": "ledger",
"tableTo": "scorers",
"columnsFrom": [
"scorer"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"ledger_event_events_id_fk": {
"name": "ledger_event_events_id_fk",
"tableFrom": "ledger",
"tableTo": "events",
"columnsFrom": [
"event"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"ledgerScores": {
"name": "ledgerScores",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"ledgerID": {
"autoincrement": false,
"name": "ledgerID",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"team": {
"autoincrement": false,
"name": "team",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"placement": {
"autoincrement": false,
"name": "placement",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"points": {
"default": 0,
"autoincrement": false,
"name": "points",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"ledgerScores_placement_scoringPresets_placement_fk": {
"name": "ledgerScores_placement_scoringPresets_placement_fk",
"tableFrom": "ledgerScores",
"tableTo": "scoringPresets",
"columnsFrom": [
"placement"
],
"columnsTo": [
"placement"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"ledgerScores_team_teams_id_fk": {
"name": "ledgerScores_team_teams_id_fk",
"tableFrom": "ledgerScores",
"tableTo": "teams",
"columnsFrom": [
"team"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"ledgerScores_ledgerID_ledger_id_fk": {
"name": "ledgerScores_ledgerID_ledger_id_fk",
"tableFrom": "ledgerScores",
"tableTo": "ledger",
"columnsFrom": [
"ledgerID"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"players": {
"name": "players",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"firstName": {
"autoincrement": false,
"name": "firstName",
"type": "text",
"primaryKey": false,
"notNull": true
},
"lastName": {
"autoincrement": false,
"name": "lastName",
"type": "text",
"primaryKey": false,
"notNull": true
},
"team": {
"autoincrement": false,
"name": "team",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"division": {
"autoincrement": false,
"name": "division",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {
"players_division_divisions_id_fk": {
"name": "players_division_divisions_id_fk",
"tableFrom": "players",
"tableTo": "divisions",
"columnsFrom": [
"division"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"players_team_teams_id_fk": {
"name": "players_team_teams_id_fk",
"tableFrom": "players",
"tableTo": "teams",
"columnsFrom": [
"team"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"uniqueConstraints": {},
"checkConstraints": {}
},
"scorers": {
"name": "scorers",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"firstName": {
"autoincrement": false,
"name": "firstName",
"type": "text",
"primaryKey": false,
"notNull": true
},
"lastName": {
"autoincrement": false,
"name": "lastName",
"type": "text",
"primaryKey": false,
"notNull": true
},
"email": {
"autoincrement": false,
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true
},
"password": {
"autoincrement": false,
"name": "password",
"type": "text",
"primaryKey": false,
"notNull": true
},
"displayName": {
"autoincrement": false,
"name": "displayName",
"type": "text",
"primaryKey": false,
"notNull": true
},
"role": {
"default": "'scorer'",
"autoincrement": false,
"name": "role",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"scoringPresets": {
"name": "scoringPresets",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"preset": {
"autoincrement": false,
"name": "preset",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"placement": {
"default": 0,
"autoincrement": false,
"name": "placement",
"type": "integer",
"primaryKey": false,
"notNull": true
},
"points": {
"default": 0,
"autoincrement": false,
"name": "points",
"type": "integer",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"teams": {
"name": "teams",
"columns": {
"id": {
"autoincrement": true,
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true
},
"name": {
"autoincrement": false,
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"color": {
"default": "'white'",
"autoincrement": false,
"name": "color",
"type": "text",
"primaryKey": false,
"notNull": true
}
},
"compositePrimaryKeys": {},
"indexes": {},
"foreignKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {
"teamScoresView": {
"columns": {
"id": {
"autoincrement": false,
"name": "id",
"type": "integer",
"primaryKey": false,
"notNull": false
},
"name": {
"autoincrement": false,
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false
},
"color": {
"autoincrement": false,
"name": "color",
"type": "text",
"primaryKey": false,
"notNull": false
},
"totalPoints": {
"autoincrement": false,
"name": "totalPoints",
"type": "numeric",
"primaryKey": false,
"notNull": false
}
},
"isExisting": false,
"name": "teamScoresView",
"definition": "select \"teams\".\"id\", \"teams\".\"name\", \"teams\".\"color\", sum(\"ledgerScores\".\"points\") as \"totalPoints\" from \"teams\" left join \"ledgerScores\" on \"teams\".\"id\" = \"ledgerScores\".\"team\" group by \"teams\".\"id\""
}
},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
}
}

View File

@@ -1,13 +0,0 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1778078709643,
"tag": "0000_broken_weapon_omega",
"breakpoints": true
}
]
}

View File

@@ -148,23 +148,18 @@ async function seed() {
for (const row of eventAttributionsCSV) { for (const row of eventAttributionsCSV) {
const eventId = eventMap.get(row.eventID); const eventId = eventMap.get(row.eventID);
const playerId = playerMap.get(row.playerID); const playerId = playerMap.get(row.playerID);
const placement = parseInt(row.placement);
if (!eventId) throw new Error(`Event "${row.eventID}" not found`); if (!eventId) throw new Error(`Event "${row.eventID}" not found`);
if (!playerId) throw new Error(`Player "${row.playerID}" not found`); if (!playerId) throw new Error(`Player "${row.playerID}" not found`);
if (placement <= 0) continue;
const result = await db const result = await db
.insert(schema.eventAttributions) .insert(schema.eventAttributions)
.values({ .values({
eventID: eventId, eventID: eventId,
playerID: playerId, playerID: playerId
placement
}) })
.returning(); .returning();
console.log( console.log(` Inserted attribution: event=${row.eventID}, player=${row.playerID}`);
` Inserted attribution: event=${row.eventID}, player=${row.playerID}, placement=${placement}`
);
} }
console.log('\nSeeding complete!'); console.log('\nSeeding complete!');

View File

@@ -19,10 +19,6 @@ export const eventAttributions = sqliteTable('eventAttributions', {
.notNull(), .notNull(),
playerID: integer('playerID') playerID: integer('playerID')
.references(() => players.id) .references(() => players.id)
.notNull(),
placement: integer('placement')
.references(() => scoringPresets.placement)
.default(0)
.notNull() .notNull()
}); });
@@ -84,8 +80,8 @@ export const ledgerScores = sqliteTable('ledgerScores', {
ledgerID: integer('ledgerID') ledgerID: integer('ledgerID')
.references(() => ledger.id) .references(() => ledger.id)
.notNull(), .notNull(),
team: integer('team') player: integer('player')
.references(() => teams.id) .references(() => players.id)
.notNull(), .notNull(),
placement: integer('placement').references(() => scoringPresets.placement), placement: integer('placement').references(() => scoringPresets.placement),
points: integer('points').notNull().default(0) points: integer('points').notNull().default(0)
@@ -100,6 +96,6 @@ export const teamScoresView = sqliteView('teamScoresView').as((qb) => {
totalPoints: sql<number>`sum(${ledgerScores.points})`.mapWith(Number).as('totalPoints') totalPoints: sql<number>`sum(${ledgerScores.points})`.mapWith(Number).as('totalPoints')
}) })
.from(teams) .from(teams)
.leftJoin(ledgerScores, eq(teams.id, ledgerScores.team)) .leftJoin(ledgerScores, eq(teams.id, ledgerScores.player))
.groupBy(teams.id); .groupBy(teams.id);
}); });

View File

@@ -1,13 +1,20 @@
import { db } from '$lib/server/db'; import { db } from '$lib/server/db';
import * as schema from '$lib/server/db/schema'; import * as schema from '$lib/server/db/schema';
import type { Actions } from './$types';
export class House {
name: string = '';
color: string = 'white';
points: number = $state(0);
}
export const load = async () => { export const load = async () => {
return await getTeams();
};
export const actions = {
addEntry: async (event) => {
console.log('something');
}
} satisfies Actions;
let testScore = 0;
export async function getTeams() {
const allTeams = await db.select().from(schema.teamScoresView); const allTeams = await db.select().from(schema.teamScoresView);
console.log(allTeams); console.log(allTeams);
return { return {
@@ -15,7 +22,7 @@ export const load = async () => {
...team, ...team,
name: team.teamName, name: team.teamName,
color: team.teamColor, color: team.teamColor,
points: team.totalPoints || 0 points: team.totalPoints || testScore
})) }))
}; };
}; }

View File

@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import type { PageData } from './$types'; import { enhance } from '$app/forms';
let { data }: { data: import('./$types').PageData } = $props(); let { data }: { data: import('./$types').PageData } = $props();
let leaderboard = $derived([...data.teams].sort((a, b) => b.points - a.points)); let leaderboard = $derived([...data.teams].sort((a, b) => b.points - a.points));
@@ -19,6 +19,8 @@
{/each} {/each}
</div> </div>
<form method="POST" action="?/addEntry" use:enhance><button>click</button></form>
<style> <style>
@import url('https://cdn.jsdelivr.net/npm/@catppuccin/palette/css/catppuccin.css'); @import url('https://cdn.jsdelivr.net/npm/@catppuccin/palette/css/catppuccin.css');
.score-box { .score-box {

View File

@@ -4,7 +4,7 @@ import adapter from '@sveltejs/adapter-auto';
const config = { const config = {
compilerOptions: { compilerOptions: {
// Force runes mode for the project, except for libraries. Can be removed in svelte 6. // Force runes mode for the project, except for libraries. Can be removed in svelte 6.
runes: ({ filename }) => filename.split(/[/\\]/).includes('node_modules') ? undefined : true runes: ({ filename }) => (filename.split(/[/\\]/).includes('node_modules') ? undefined : true)
}, },
kit: { kit: {
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
@@ -17,6 +17,14 @@ const config = {
...config, ...config,
include: [...config.include, '../drizzle.config.ts'] include: [...config.include, '../drizzle.config.ts']
}) })
},
experimental: {
remoteFunctions: true
}
},
compilerOptions: {
experimental: {
async: true
} }
} }
}; };