import { NextRequest, NextResponse } from 'next/server' import prisma from '@/lib/prisma' import { getMobileUserId } from '@/lib/mobile-auth' export async function GET( req: NextRequest, { params }: { params: Promise<{ id: string }> } ) { const userId = getMobileUserId(req) if (!userId) return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }) const { id } = await params const note = await prisma.note.findFirst({ where: { id, userId, trashedAt: null }, select: { id: true, title: true, content: true, updatedAt: true, createdAt: true, color: true, notebook: { select: { id: true, name: true } }, }, }) if (!note) return NextResponse.json({ error: 'Note introuvable' }, { status: 404 }) return NextResponse.json({ note }) } export async function PUT( req: NextRequest, { params }: { params: Promise<{ id: string }> } ) { const userId = getMobileUserId(req) if (!userId) return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }) const { id } = await params const { title, content } = await req.json().catch(() => ({})) const existing = await prisma.note.findFirst({ where: { id, userId, trashedAt: null } }) if (!existing) return NextResponse.json({ error: 'Note introuvable' }, { status: 404 }) const htmlContent = content !== undefined ? buildHtmlContent(content) : existing.content const note = await prisma.note.update({ where: { id }, data: { ...(title?.trim() ? { title: title.trim() } : {}), content: htmlContent, updatedAt: new Date(), }, select: { id: true, title: true, updatedAt: true }, }) return NextResponse.json({ note }) } export async function DELETE( req: NextRequest, { params }: { params: Promise<{ id: string }> } ) { const userId = getMobileUserId(req) if (!userId) return NextResponse.json({ error: 'Non autorisé' }, { status: 401 }) const { id } = await params const note = await prisma.note.findFirst({ where: { id, userId, trashedAt: null } }) if (!note) return NextResponse.json({ error: 'Note introuvable' }, { status: 404 }) await prisma.note.update({ where: { id }, data: { trashedAt: new Date() } }) return NextResponse.json({ ok: true }) } function buildHtmlContent(text: string): string { if (!text.trim()) return '
' if (text.trimStart().startsWith('<')) return text return text .split('\n') .map((line) => `${line.trim() ? escapeHtml(line) : ''}
`) .join('') } function escapeHtml(s: string) { return s.replace(/&/g, '&').replace(//g, '>') }