import { z } from "zod"; import { procedure, router } from "../trpc"; import { db } from "@/db/PrismaClient"; import { TRPCError } from '@trpc/server'; export const exerciseRouter = router({ getExercises: procedure .input(z.object({ cursor: z.string().optional(), })) .mutation(async ({ ctx, input }) => { try{ const { cursor } = input; let exercises: any[] = []; if (cursor) { exercises = await db.exercise.findMany({ take: 10, skip: 1, cursor: { id: cursor, }, }); } else { exercises = await db.exercise.findMany({ take: 10, }); } let newCursor = undefined; if (exercises.length > 0) { newCursor = exercises[exercises.length - 1].id; } return { exercises, newCursor, }; } catch (error) { console.log(error) if (error instanceof TRPCError) throw error; throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: (error as Error).message, cause: error }); } }), searchExercises: procedure .input(z.object({ search: z.string(), })) .mutation(async ({ ctx, input }) => { try{ const { search } = input; let exercises: any[] = []; exercises = await db.exercise.findMany({ where: { name: { contains: search, }, }, take: 10, }); return exercises } catch (error) { console.log(error) if (error instanceof TRPCError) throw error; throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: (error as Error).message, cause: error }); } }), createExercise: procedure .input(z.object({ name: z.string(), description: z.string(), video: z.string(), image: z.string(), category: z.string(), difficulty: z.string(), })) .mutation(async ({ ctx, input }) => { const { name, description, video, image, category, difficulty } = input; try { const exercise = await db.exercise.create({ data: { name, description, video, image, category, level: difficulty, }, }); console.log('Inserted New Exercise', exercise) return exercise; } catch (error) { console.log(error) if (error instanceof TRPCError) throw error; throw new TRPCError({ code: 'INTERNAL_SERVER_ERROR', message: (error as Error).message, cause: error }); } }), })