Implement put route for updating existing assessments
This commit is contained in:
@@ -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),
|
||||||
|
})
|
||||||
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user