1.1.0 #29

Merged
Xominus merged 25 commits from discord into main 2026-08-22 18:00:22 +00:00
2 changed files with 39 additions and 9 deletions
Showing only changes of commit 564a18cfcb - Show all commits
+11
View File
@@ -23,6 +23,7 @@ import { EventsService, EventStatusSchema } from "./services/events";
import { AccountsService, type AccountRole } from "./services/accounts"; import { AccountsService, type AccountRole } from "./services/accounts";
import { Value } from "@sinclair/typebox/value"; import { Value } from "@sinclair/typebox/value";
import { AssessmentsService } from "./services/assessments"; import { AssessmentsService } from "./services/assessments";
import { Not } from "@sinclair/typebox";
// CONSTANTS // CONSTANTS
// ----------------------- // -----------------------
@@ -509,6 +510,16 @@ export const app = new Elysia()
id: t.Optional(t.String()), id: t.Optional(t.String()),
}) })
}) })
.put("/:id", async ({ body: { player, activityPerformances }, params: { id } }) => {
const updated = await s.Assessments.update(id, player, activityPerformances);
if (!updated) throw new NotFoundError("Assessment not found");
}, {
params: t.Object({ id: t.String() }),
body: t.Object({
player: PlayerSchema,
activityPerformances: t.Array(ActivityPerformanceSchema),
})
})
) )
) )
+28 -9
View File
@@ -2,10 +2,10 @@ import { Activity, type ActivityPerformance, type Player } from "@blade-and-braw
import { db } from "../database/db"; import { db } from "../database/db";
export class AssessmentsService { export class AssessmentsService {
async create(player: Player, activityPerformances: ActivityPerformance[], accountId?: string) { private static performanceFor = (activityPerformances: ActivityPerformance[], activity: Activity) =>
const performanceFor = (activity: Activity) => activityPerformances.find((p) => p.activity === activity)?.performance ?? null;
activityPerformances.find((p) => p.activity === activity)?.performance ?? null;
async create(player: Player, activityPerformances: ActivityPerformance[], accountId?: string) {
return await db.insertInto("assessments") return await db.insertInto("assessments")
.values({ .values({
account_id: accountId ?? null, account_id: accountId ?? null,
@@ -13,12 +13,12 @@ export class AssessmentsService {
age: player.metrics.age, age: player.metrics.age,
weight: player.metrics.weight, weight: player.metrics.weight,
gender: player.metrics.gender, gender: player.metrics.gender,
perf_back_squat: performanceFor(Activity.BackSquat), perf_back_squat: AssessmentsService.performanceFor(activityPerformances, Activity.BackSquat),
perf_deadlift: performanceFor(Activity.Deadlift), perf_deadlift: AssessmentsService.performanceFor(activityPerformances, Activity.Deadlift),
perf_bench_press: performanceFor(Activity.BenchPress), perf_bench_press: AssessmentsService.performanceFor(activityPerformances, Activity.BenchPress),
perf_broad_jump: performanceFor(Activity.BroadJump), perf_broad_jump: AssessmentsService.performanceFor(activityPerformances, Activity.BroadJump),
perf_run: performanceFor(Activity.Run), perf_run: AssessmentsService.performanceFor(activityPerformances, Activity.Run),
perf_cone_drill: performanceFor(Activity.ConeDrill), perf_cone_drill: AssessmentsService.performanceFor(activityPerformances, Activity.ConeDrill),
}) })
.returning("id") .returning("id")
.executeTakeFirstOrThrow(); .executeTakeFirstOrThrow();
@@ -40,6 +40,25 @@ export class AssessmentsService {
.execute(); .execute();
} }
async update(id: string, player: Player, activityPerformances: ActivityPerformance[]) {
const result = await db.updateTable("assessments")
.where("id", "=", id)
.set({
name: player.name ?? "Anonymous",
age: player.metrics.age,
weight: player.metrics.weight,
gender: player.metrics.gender,
perf_back_squat: AssessmentsService.performanceFor(activityPerformances, Activity.BackSquat),
perf_deadlift: AssessmentsService.performanceFor(activityPerformances, Activity.Deadlift),
perf_bench_press: AssessmentsService.performanceFor(activityPerformances, Activity.BenchPress),
perf_broad_jump: AssessmentsService.performanceFor(activityPerformances, Activity.BroadJump),
perf_run: AssessmentsService.performanceFor(activityPerformances, Activity.Run),
perf_cone_drill: AssessmentsService.performanceFor(activityPerformances, Activity.ConeDrill),
})
.executeTakeFirst();
return result.numUpdatedRows > 0n;
}
async delete(id: string, accountId: string): Promise<boolean> { async delete(id: string, accountId: string): Promise<boolean> {
const result = await db.deleteFrom("assessments") const result = await db.deleteFrom("assessments")
.where("id", "=", id) .where("id", "=", id)