From fcad3d252e553bd4a38993b696626a1c4208a09f Mon Sep 17 00:00:00 2001 From: Bert Hausmans Date: Wed, 20 May 2026 20:48:42 +0200 Subject: [PATCH] fix(lessons): cascade delete descendants in service (no FK on parent_id) --- packages/backend/src/services/lessons.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/services/lessons.ts b/packages/backend/src/services/lessons.ts index d5a03fe..b00584f 100644 --- a/packages/backend/src/services/lessons.ts +++ b/packages/backend/src/services/lessons.ts @@ -1,4 +1,4 @@ -import { eq, isNull, sql } from 'drizzle-orm'; +import { eq, inArray, isNull, sql } from 'drizzle-orm'; import type { Db } from '../db/client.js'; import { cards, lessons } from '../db/schema.js'; import { ApiError } from '../lib/errors.js'; @@ -60,8 +60,10 @@ export async function updateLesson(db: Db, id: number, input: LessonUpdateInput) } export async function deleteLesson(db: Db, id: number): Promise { - const r = db.delete(lessons).where(eq(lessons.id, id)).run(); - if (r.changes === 0) throw ApiError.notFound('Lesson'); + const existing = db.select().from(lessons).where(eq(lessons.id, id)).get(); + if (!existing) throw ApiError.notFound('Lesson'); + const ids = await getDescendantLessonIds(db, id); + db.delete(lessons).where(inArray(lessons.id, ids)).run(); } export async function moveLesson(db: Db, id: number, input: LessonMoveInput): Promise {