Эх сурвалжийг харах

feat(sync-workout-sessions): enhance workout session upsert logic to handle exercises and sets creation and deletion
refactor(workout-session.store): reorganize imports for better clarity and maintainability
style(workout-set): update comments from French to English for consistency and clarity

Mathias 1 сар өмнө
parent
commit
8285596f66

+ 23 - 3
src/features/workout-session/actions/sync-workout-sessions.action.ts

@@ -22,11 +22,31 @@ export const syncWorkoutSessionAction = actionClient.schema(syncWorkoutSessionSc
   try {
     const { session } = parsedInput;
 
-    // Créer ou mettre à jour la session
     const result = await prisma.workoutSession.upsert({
       where: { id: session.id },
-      create: session,
-      update: session,
+      create: {
+        ...session,
+        exercises: {
+          create: session.exercises.map((exercise) => ({
+            ...exercise,
+            sets: {
+              create: exercise.sets,
+            },
+          })),
+        },
+      },
+      update: {
+        ...session,
+        exercises: {
+          deleteMany: {},
+          create: session.exercises.map((exercise) => ({
+            ...exercise,
+            sets: {
+              create: exercise.sets,
+            },
+          })),
+        },
+      },
     });
 
     return { data: result };

+ 2 - 1
src/features/workout-session/model/workout-session.store.ts

@@ -1,7 +1,8 @@
 import { create } from "zustand";
 
 import { workoutSessionLocal } from "@/shared/lib/workout-session/workout-session.local";
-import { WorkoutSession, WorkoutSessionExercise, WorkoutSet } from "@/features/workout-session/types/workout-set";
+import { WorkoutSession } from "@/shared/lib/workout-session/types/workout-session";
+import { WorkoutSessionExercise, WorkoutSet } from "@/features/workout-session/types/workout-set";
 import { useWorkoutBuilderStore } from "@/features/workout-builder/model/workout-builder.store";
 
 import { ExerciseWithAttributes } from "../../workout-builder/types";

+ 3 - 15
src/features/workout-session/types/workout-set.ts

@@ -6,11 +6,11 @@ export type WorkoutSetUnit = "kg" | "lbs";
 export interface WorkoutSet {
   id: string;
   setIndex: number;
-  types: WorkoutSetType[]; // Pour supporter plusieurs colonnes
+  types: WorkoutSetType[]; // To support multiple columns
   valueInt?: number; // reps, weight, minutes, etc.
-  valuesInt?: number[]; // Pour supporter plusieurs colonnes
+  valuesInt?: number[]; // To support multiple columns
   valueSec?: number; // seconds (if TIME)
-  valuesSec?: number[]; // Pour supporter plusieurs colonnes
+  valuesSec?: number[]; // To support multiple columns
   unit?: WorkoutSetUnit;
   units?: WorkoutSetUnit[]; // Pour supporter plusieurs colonnes
   completed: boolean;
@@ -21,15 +21,3 @@ export interface WorkoutSessionExercise extends ExerciseWithAttributes {
   order: number;
   sets: WorkoutSet[];
 }
-
-export interface WorkoutSession {
-  id: string;
-  userId: string;
-  startedAt: string;
-  endedAt?: string;
-  duration?: number;
-  exercises: WorkoutSessionExercise[];
-  status?: "active" | "completed" | "synced";
-  currentExerciseIndex?: number;
-  isActive?: boolean;
-}