Files
FL-Akademie/lib/course-queries.ts

69 lines
1.7 KiB
TypeScript

import { prisma } from "@/lib/prisma";
export async function listPublishedCourses() {
return prisma.course.findMany({
where: { published: true },
orderBy: { updatedAt: "desc" },
include: {
categories: { include: { category: true } },
modules: {
orderBy: { sortOrder: "asc" },
include: {
lessons: {
where: { published: true },
orderBy: { sortOrder: "asc" },
select: { slug: true },
},
},
},
},
});
}
export async function getCourseBySlug(slug: string) {
return prisma.course.findFirst({
where: { slug, published: true },
include: {
categories: { include: { category: true } },
modules: {
orderBy: { sortOrder: "asc" },
include: {
lessons: { where: { published: true }, orderBy: { sortOrder: "asc" } },
},
},
},
});
}
export async function getLessonContext(courseSlug: string, lessonSlug: string) {
const course = await prisma.course.findFirst({
where: { slug: courseSlug, published: true },
include: {
modules: {
orderBy: { sortOrder: "asc" },
include: {
lessons: { where: { published: true }, orderBy: { sortOrder: "asc" } },
},
},
},
});
if (!course) return null;
for (const mod of course.modules) {
const lesson = mod.lessons.find((l) => l.slug === lessonSlug);
if (lesson) return { course, module: mod, lesson };
}
return null;
}
export function firstLessonPath(course: {
slug: string;
modules: { lessons: { slug: string }[] }[];
}): string | null {
for (const m of course.modules) {
const first = m.lessons[0];
if (first) return `/kurse/${course.slug}/lektionen/${first.slug}`;
}
return null;
}