Move domain models into domain package with schemas and validate with zod + elysia. Some maintenence as well

This commit is contained in:
Dominic Ferrando
2026-06-22 13:59:04 -04:00
parent ed5abac209
commit 6fa3d78571
16 changed files with 220 additions and 166 deletions
+2
View File
@@ -0,0 +1,2 @@
export * from "./models"
export * from "./utils"
+44
View File
@@ -0,0 +1,44 @@
import { z } from "zod";
export enum Attribute {
Strength = "Strength",
Power = "Power",
Endurance = "Endurance",
Agility = "Agility",
}
export enum Activity {
BackSquat = "BackSquat",
Deadlift = "Deadlift",
BenchPress = "BenchPress",
Run = "Run",
BroadJump = "BroadJump",
ConeDrill = "ConeDrill",
}
export enum Gender {
Male = "Male",
Female = "Female",
}
export const MetricsSchema = z.object({
age: z.number(),
weight: z.number(),
gender: z.enum(Gender),
});
export const PlayerSchema = z.object({
name: z.string().optional(),
metrics: MetricsSchema,
});
export const ActivityPerformanceSchema = z.object({
activity: z.enum(Activity),
performance: z.number(),
});
export type StandardUnit = "ms" | "cm" | "kg";
export type Metrics = z.infer<typeof MetricsSchema>;
export type Player = z.infer<typeof PlayerSchema>;
export type ActivityPerformance = z.infer<typeof ActivityPerformanceSchema>;
+28
View File
@@ -0,0 +1,28 @@
export const lbToKg = (lb: number | string): number => +lb * 0.453592;
export const kgToLb = (kg: number | string): number => +kg * 2.20462;
export const minToMs = (min: number) => min * 60000;
export const secToMs = (sec: number) => sec * 1000;
export const msToMin = (ms: number) => ms / 60000;
export const ftToCm = (ft: number) => ft * 30.48;
export const inToCm = (inches: number) => inches * 2.54;
export const cmToIn = (cm: number) => cm / 2.54;
export const msToTime = (ms: number, includeMs = false): string => {
const minutes = Math.floor(ms / 60000);
const seconds = Math.floor((ms % 60000) / 1000);
const milliseconds = Math.floor(ms % 1000);
let formattedTime = `${minutes}:${seconds.toString().padStart(2, "0")}`;
if (includeMs) {
formattedTime += `.${milliseconds.toString().padStart(3, "0")}`;
}
return formattedTime;
};
export const range = (length: number) =>
Array.from({ length: length }, (_, i) => i);
export const clamp = (x: number, lo: number, hi: number) =>
Math.max(lo, Math.min(hi, x));