From 576fed2ee2c7db0b106e4bf523d10cefbc8a8282 Mon Sep 17 00:00:00 2001 From: Zeke Abshire Date: Wed, 13 Dec 2023 23:44:49 -0600 Subject: [PATCH] feat: topic api --- src/server/api/routers/topic.ts | 35 ++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/server/api/routers/topic.ts b/src/server/api/routers/topic.ts index de8eeb2..93cf686 100644 --- a/src/server/api/routers/topic.ts +++ b/src/server/api/routers/topic.ts @@ -1,9 +1,30 @@ import { eq } from "drizzle-orm"; -import { - createTRPCRouter, - protectedProcedure, - publicProcedure, -} from "~/server/api/trpc"; -import { topics } from "~/server/db/schema"; +import { z } from "zod"; +import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; +import { lessonToTopic, topics } from "~/server/db/schema"; -export const topicRouter = createTRPCRouter({}); +export const topicRouter = createTRPCRouter({ + getAllLessonTopics: protectedProcedure + .input(z.object({ lessonId: z.number() })) + .query(async ({ ctx, input }) => { + return await ctx.db.query.lessonToTopic.findMany({ + where: eq(lessonToTopic.lessonId, input.lessonId), + with: { topic: true }, + }); + }), + getTopic: protectedProcedure + .input( + z.object({ + topicId: z.number(), + includeExercises: z.boolean().optional().default(false), + }), + ) + .query(async ({ ctx, input }) => { + const exercises = input.includeExercises ? true : undefined; + return await ctx.db.query.topics.findFirst({ + where: eq(topics.topicId, input.topicId), + with: { exercises }, + // with: { exercises: { with: { exercise: { with: { topics: true } } } } }, + }); + }), +});