123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- "use server";
- import { z } from "zod";
- import { workoutSessionStatuses } from "@/shared/lib/workout-session/types/workout-session";
- import { prisma } from "@/shared/lib/prisma";
- import { actionClient } from "@/shared/api/safe-actions";
- // Schéma de validation
- 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
- status: z.enum(workoutSessionStatuses),
- }),
- });
- export const syncWorkoutSessionAction = actionClient.schema(syncWorkoutSessionSchema).action(async ({ parsedInput }) => {
- try {
- const { session } = parsedInput;
- const result = await prisma.workoutSession.upsert({
- where: { id: session.id },
- 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 };
- } catch (error) {
- console.error("Error syncing workout session:", error);
- return { serverError: "Failed to sync workout session" };
- }
- });
|