fix: organisateur IA — apply tag utilise syncNoteLabels au lieu de properties
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 5m1s
CI / Deploy production (on server) (push) Successful in 1m2s

- applyTag faisait un PATCH sur /api/notes/[id]/properties avec { tags: [...] }
  mais l'API properties attend { properties: { propId: value } }
- Maintenant: PATCH /api/ai/organize-notebook qui appelle syncNoteLabels()
- Les tags sont appliqués comme LABELS (système existant) sur les notes
- Merge avec labels existants (n'écrase pas)
This commit is contained in:
Antigravity
2026-06-19 21:06:17 +00:00
parent 2ec31a3de5
commit 6084077b54
3 changed files with 48 additions and 9 deletions

View File

@@ -3,6 +3,7 @@ import { auth } from '@/auth'
import prisma from '@/lib/prisma'
import { notebookOrganizerService } from '@/lib/ai/services/notebook-organizer.service'
import { checkEntitlementOrThrow, QuotaExceededError, incrementUsageAsync } from '@/lib/entitlements'
import { syncNoteLabels } from '@/app/actions/notes'
export async function POST(request: NextRequest) {
try {
@@ -55,3 +56,41 @@ export async function POST(request: NextRequest) {
return NextResponse.json({ error: error.message || 'Failed to organize notebook' }, { status: 500 })
}
}
export async function PATCH(request: NextRequest) {
try {
const session = await auth()
if (!session?.user?.id) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const { action, tagName, noteIds, notebookId } = await request.json()
if (action === 'apply_tag' && tagName && Array.isArray(noteIds)) {
// Fetch existing labels for each note, merge with new tag
for (const noteId of noteIds) {
const note = await prisma.note.findUnique({
where: { id: noteId },
select: { labels: true, notebookId: true },
})
if (!note) continue
let existingLabels: string[] = []
try { existingLabels = note.labels ? JSON.parse(note.labels) : [] } catch {}
if (!existingLabels.includes(tagName)) {
existingLabels.push(tagName)
}
await syncNoteLabels(noteId, existingLabels, note.notebookId, session.user.id)
}
return NextResponse.json({ success: true, applied: noteIds.length })
}
return NextResponse.json({ error: 'Invalid action' }, { status: 400 })
} catch (error: any) {
console.error('[Notebook Organizer PATCH] Error:', error)
return NextResponse.json({ error: error.message }, { status: 500 })
}
}