Implement basic service and api for accounts
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import { Activity, Gender, type Player } from "@blade-and-brawn/domain";
|
||||
import { db } from "../database/db";
|
||||
import type { CalculatorService } from "./calculator";
|
||||
import { Value } from "@sinclair/typebox/value";
|
||||
import { t } from "elysia";
|
||||
|
||||
export class AccountsService {
|
||||
constructor(private Calculator: CalculatorService) { }
|
||||
|
||||
async get(id: string) {
|
||||
return await (db).selectFrom("accounts")
|
||||
.selectAll()
|
||||
.where("id", "=", id)
|
||||
.executeTakeFirst();
|
||||
}
|
||||
|
||||
async stats(id: string) {
|
||||
const latestAssessment = await db.selectFrom("accounts")
|
||||
.innerJoin("assessments", "assessments.account_id", "accounts.id")
|
||||
.select([
|
||||
"assessments.age", "assessments.gender", "assessments.weight", "assessments.name",
|
||||
"assessments.perf_back_squat", "assessments.perf_bench_press", "assessments.perf_broad_jump",
|
||||
"assessments.perf_cone_drill", "assessments.perf_deadlift", "assessments.perf_run"
|
||||
])
|
||||
.where("accounts.id", "=", id)
|
||||
.orderBy("assessments.created_at", "desc")
|
||||
.limit(1)
|
||||
.executeTakeFirst();
|
||||
if (!latestAssessment) return;
|
||||
Value.Assert(t.Enum(Gender), latestAssessment.gender);
|
||||
|
||||
return this.Calculator.calculate(
|
||||
{
|
||||
name: latestAssessment.name,
|
||||
metrics: {
|
||||
age: latestAssessment.age,
|
||||
weight: latestAssessment.weight,
|
||||
gender: latestAssessment.gender
|
||||
}
|
||||
},
|
||||
[
|
||||
// Strength
|
||||
{
|
||||
activity: Activity.BenchPress,
|
||||
performance: latestAssessment.perf_bench_press ?? 0
|
||||
},
|
||||
{
|
||||
activity: Activity.Deadlift,
|
||||
performance: latestAssessment.perf_deadlift ?? 0
|
||||
},
|
||||
{
|
||||
activity: Activity.BackSquat,
|
||||
performance: latestAssessment.perf_back_squat ?? 0
|
||||
},
|
||||
// Power
|
||||
{
|
||||
activity: Activity.BroadJump,
|
||||
performance: latestAssessment.perf_broad_jump ?? 0
|
||||
},
|
||||
// Endurance
|
||||
{
|
||||
activity: Activity.Run,
|
||||
performance: latestAssessment.perf_run ?? 0
|
||||
},
|
||||
// Agility
|
||||
{
|
||||
activity: Activity.ConeDrill,
|
||||
performance: latestAssessment.perf_cone_drill ?? 0
|
||||
},
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user