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}