all repos — go-lift @ 387721fc5e90ba268efbae885c9baf8e0a543f28

Lightweight workout tracker prototype..

ui/src/types/models.ts (view raw)

  1export interface User {
  2  id?: number;
  3  name: string;
  4  isFemale: boolean;
  5  height?: number; // In cm
  6  weight?: number; // In kg
  7  birthDate?: string;
  8  createdAt?: string;
  9  updatedAt?: string;
 10}
 11
 12export interface Muscle {
 13  id: number;
 14  name: string;
 15  createdAt: string;
 16  updatedAt: string;
 17}
 18
 19export interface Exercise {
 20  id: number;
 21  name: string;
 22  level: string;
 23  category: string;
 24  force?: string;
 25  mechanic?: string;
 26  equipment?: string;
 27  instructions?: string;
 28  primaryMuscles: Muscle[];
 29  secondaryMuscles: Muscle[];
 30  createdAt: string;
 31  updatedAt: string;
 32}
 33
 34export interface Set {
 35  id: number;
 36  exerciseItemId: number;
 37  reps: number;
 38  weight: number;
 39  duration: number; // In seconds
 40  orderIndex: number;
 41  createdAt: string;
 42  updatedAt: string;
 43}
 44
 45export interface ExerciseItem {
 46  id: number;
 47  routineItemId: number;
 48  exerciseId: number;
 49  orderIndex: number;
 50  createdAt: string;
 51  updatedAt: string;
 52  exercise: Exercise;
 53  sets: Set[];
 54}
 55
 56export interface RoutineItem {
 57  id: number;
 58  routineId: number;
 59  type: string; // "exercise" or "superset"
 60  restTime: number; // In seconds
 61  orderIndex: number;
 62  createdAt: string;
 63  updatedAt: string;
 64  exerciseItems: ExerciseItem[];
 65}
 66
 67export interface Routine {
 68  id: number;
 69  name: string;
 70  description: string;
 71  createdAt: string;
 72  updatedAt: string;
 73  items: RoutineItem[];
 74}
 75
 76export interface RecordSet {
 77  id: number;
 78  recordExerciseItemId: number;
 79  setId: number;
 80  actualReps: number;
 81  actualWeight: number;
 82  actualDuration: number; // In seconds
 83  completedAt: string;
 84  orderIndex: number;
 85  createdAt: string;
 86  updatedAt: string;
 87  set: Set;
 88}
 89
 90export interface RecordExerciseItem {
 91  id: number;
 92  recordItemId: number;
 93  exerciseItemId: number;
 94  orderIndex: number;
 95  createdAt: string;
 96  updatedAt: string;
 97  exerciseItem: ExerciseItem;
 98  recordSets: RecordSet[];
 99}
100
101export interface RecordItem {
102  id: number;
103  recordRoutineId: number;
104  routineItemId: number;
105  duration?: number; // In seconds
106  actualRestTime?: number; // In seconds
107  orderIndex: number;
108  createdAt: string;
109  updatedAt: string;
110  routineItem: RoutineItem;
111  recordExerciseItems: RecordExerciseItem[];
112}
113
114export interface RecordRoutine {
115  id: number;
116  routineId: number;
117  duration?: number; // In seconds
118  createdAt: string;
119  updatedAt: string;
120  routine: Routine;
121  recordItems: RecordItem[];
122}
123
124export interface WorkoutStats {
125  totalWorkouts: number;
126  totalMinutes: number;
127  totalExercises: number;
128  mostFrequentExercise?: {
129    name: string;
130    count: number;
131  };
132  mostFrequentRoutine?: {
133    name: string;
134    count: number;
135  };
136  recentWorkouts: RecordRoutine[];
137}