|
@@ -6,14 +6,33 @@ import { workoutSessionStatuses } from "@/shared/lib/workout-session/types/worko
|
|
|
import { prisma } from "@/shared/lib/prisma";
|
|
|
import { actionClient } from "@/shared/api/safe-actions";
|
|
|
|
|
|
-// Schéma de validation
|
|
|
+// Schéma WorkoutSet
|
|
|
+const workoutSetSchema = z.object({
|
|
|
+ id: z.string(),
|
|
|
+ setIndex: z.number(),
|
|
|
+ types: z.array(z.enum(["TIME", "WEIGHT", "REPS", "BODYWEIGHT", "NA"])),
|
|
|
+ valueInt: z.number().optional(),
|
|
|
+ valuesInt: z.array(z.number()).optional(),
|
|
|
+ valueSec: z.number().optional(),
|
|
|
+ valuesSec: z.array(z.number()).optional(),
|
|
|
+ unit: z.enum(["kg", "lbs"]).optional(),
|
|
|
+ units: z.array(z.enum(["kg", "lbs"])).optional(),
|
|
|
+ completed: z.boolean(),
|
|
|
+});
|
|
|
+
|
|
|
+const workoutSessionExerciseSchema = z.object({
|
|
|
+ id: z.string(),
|
|
|
+ order: z.number(),
|
|
|
+ sets: z.array(workoutSetSchema),
|
|
|
+});
|
|
|
+
|
|
|
const syncWorkoutSessionSchema = z.object({
|
|
|
session: z.object({
|
|
|
id: z.string(),
|
|
|
userId: z.string(),
|
|
|
startedAt: z.string(),
|
|
|
endedAt: z.string().optional(),
|
|
|
- exercises: z.array(z.any()), // TODO: define the schema
|
|
|
+ exercises: z.array(workoutSessionExerciseSchema),
|
|
|
status: z.enum(workoutSessionStatuses),
|
|
|
}),
|
|
|
});
|
|
@@ -28,9 +47,15 @@ export const syncWorkoutSessionAction = actionClient.schema(syncWorkoutSessionSc
|
|
|
...session,
|
|
|
exercises: {
|
|
|
create: session.exercises.map((exercise) => ({
|
|
|
- ...exercise,
|
|
|
+ id: exercise.id,
|
|
|
+ order: exercise.order,
|
|
|
+ exerciseId: exercise.id,
|
|
|
+ exercise: { connect: { id: exercise.id } },
|
|
|
sets: {
|
|
|
- create: exercise.sets,
|
|
|
+ create: exercise.sets.map((set) => ({
|
|
|
+ ...set,
|
|
|
+ type: set.types && set.types.length > 0 ? set.types[0] : "NA",
|
|
|
+ })),
|
|
|
},
|
|
|
})),
|
|
|
},
|
|
@@ -38,11 +63,16 @@ export const syncWorkoutSessionAction = actionClient.schema(syncWorkoutSessionSc
|
|
|
update: {
|
|
|
...session,
|
|
|
exercises: {
|
|
|
- deleteMany: {},
|
|
|
create: session.exercises.map((exercise) => ({
|
|
|
- ...exercise,
|
|
|
+ id: exercise.id,
|
|
|
+ order: exercise.order,
|
|
|
+ exerciseId: exercise.id,
|
|
|
+ exercise: { connect: { id: exercise.id } },
|
|
|
sets: {
|
|
|
- create: exercise.sets,
|
|
|
+ create: exercise.sets.map((set) => ({
|
|
|
+ ...set,
|
|
|
+ type: set.types && set.types.length > 0 ? set.types[0] : "NA",
|
|
|
+ })),
|
|
|
},
|
|
|
})),
|
|
|
},
|