31 lines
No EOL
1.1 KiB
TypeScript
31 lines
No EOL
1.1 KiB
TypeScript
import { db } from "../../../../db/index";
|
|
import { topics, lessons } from "../../../../db/schema";
|
|
import { eq } from "drizzle-orm";
|
|
import { generateLesson } from "../../../../utils/generateLesson";
|
|
import { verifyLicenseKey } from "../../../../utils/license";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const key = getHeader(event, "x-license-key") ?? "";
|
|
if (!verifyLicenseKey(key)) {
|
|
throw createError({ statusCode: 401, message: "Unauthorized" });
|
|
}
|
|
|
|
const id = getRouterParam(event, "id")!;
|
|
|
|
const topic = await db.query.topics.findFirst({ where: eq(topics.id, id) });
|
|
if (!topic) throw createError({ statusCode: 404, message: "Topic not found" });
|
|
|
|
// wipe existing lesson
|
|
await db.delete(lessons).where(eq(lessons.topicId, id));
|
|
|
|
// reset topic status so generateLesson doesnt bail
|
|
await db.update(topics).set({ status: "pending" }).where(eq(topics.id, id));
|
|
|
|
try {
|
|
await generateLesson(id);
|
|
return { status: "ready" };
|
|
} catch (err: any) {
|
|
console.error(`[dev/regenerate-lesson] topic ${id}: ${err?.message ?? err}`);
|
|
return { status: "error" };
|
|
}
|
|
}); |