From d8e42566871ccb92733aa6de8ac9c7cafee70bd0 Mon Sep 17 00:00:00 2001 From: corenthin-lebreton Date: Fri, 27 Feb 2026 01:11:11 +0100 Subject: [PATCH] fix subchapter creation bug2 --- app/api/subchapters/create/route.ts | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/app/api/subchapters/create/route.ts b/app/api/subchapters/create/route.ts index 293e719..843f89a 100644 --- a/app/api/subchapters/create/route.ts +++ b/app/api/subchapters/create/route.ts @@ -11,23 +11,40 @@ export async function POST(request: NextRequest) { const { category_id, name } = await request.json() if (!category_id || !name?.trim()) return NextResponse.json({ error: 'category_id et nom requis' }, { status: 400 }) - // Vérifier que la catégorie appartient bien à cet utilisateur const admin = createAdminClient() as any + + // Vérifier que la catégorie existe (et appartient à l'utilisateur si created_by est disponible) const { data: cat } = await admin .from('categories') - .select('id') + .select('id, created_by') .eq('id', category_id) - .eq('created_by', user.id) .single() - if (!cat) return NextResponse.json({ error: 'Catégorie introuvable ou accès refusé' }, { status: 404 }) + if (!cat) return NextResponse.json({ error: 'Catégorie introuvable' }, { status: 404 }) + // Vérification de propriété uniquement si la colonne est remplie + if (cat.created_by && cat.created_by !== user.id) { + return NextResponse.json({ error: 'Accès refusé' }, { status: 403 }) + } - const { data, error } = await admin + // Tentative avec created_by (requiert la migration SQL) + let { data, error } = await admin .from('subchapters') .insert({ category_id, name: name.trim(), created_by: user.id }) .select() .single() + // Fallback : si la colonne n'existe pas encore (migration non jouée) + if (error && error.message?.includes('created_by')) { + console.warn('[subchapters/create] colonne created_by manquante — migration SQL non jouée') + const fallback = await admin + .from('subchapters') + .insert({ category_id, name: name.trim() }) + .select() + .single() + data = fallback.data + error = fallback.error + } + if (error) return NextResponse.json({ error: error.message }, { status: 500 }) return NextResponse.json({ success: true, subchapter: data }) } catch {