Files
Momento/memento-note/app/api/notes/[id]/history/route.ts
sepehr 69ea064ca8
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m16s
feat: smart note history with manual/auto modes, delete entries, i18n fixes
- Add noteHistoryMode setting (manual default / auto) with DB migration
- Manual mode: commit button in editor toolbar creates snapshots on demand
- Auto mode: smart snapshots with 20-char diff threshold + 5min cooldown,
  structural changes (color, pin, archive, labels) bypass cooldown
- Add delete individual history entries from history modal
- Fix sidebar: Notes nav no longer active on notebook pages
- Fix sidebar icon: replace filled Lightbulb with outlined FileText
- Fix title suggestions: change from amber to sky blue color scheme
- Fix hydration mismatch: add suppressHydrationWarning on locale dates
- Complete i18n: add history, sort, and AI chat translations for all 16 languages
- Translate French AI assistant section (40+ keys) from English to French
- Update README with new features and stack info

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 21:05:55 +02:00

52 lines
1.8 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'
import { getNoteHistory, restoreNoteVersion } from '@/app/actions/notes'
export async function GET(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
const session = await auth()
if (!session?.user?.id) {
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
}
try {
const { id } = await params
const limitRaw = request.nextUrl.searchParams.get('limit')
const limit = limitRaw ? Number.parseInt(limitRaw, 10) : 30
const entries = await getNoteHistory(id, Number.isNaN(limit) ? 30 : limit)
return NextResponse.json({ success: true, data: entries })
} catch (error) {
console.error('Error fetching note history:', error)
return NextResponse.json({ success: false, error: 'Failed to fetch history' }, { status: 500 })
}
}
export async function POST(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
const session = await auth()
if (!session?.user?.id) {
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
}
try {
const { id } = await params
const body = await request.json()
const historyEntryId = body?.historyEntryId
if (!historyEntryId || typeof historyEntryId !== 'string') {
return NextResponse.json({ success: false, error: 'historyEntryId is required' }, { status: 400 })
}
const restoredNote = await restoreNoteVersion(id, historyEntryId)
return NextResponse.json({ success: true, data: restoredNote })
} catch (error) {
const message = error instanceof Error ? error.message : 'Failed to restore history version'
console.error('Error restoring note history:', error)
return NextResponse.json({ success: false, error: message }, { status: 500 })
}
}