Files
biblical-guide.com/app/api/highlights/[id]/route.ts

86 lines
2.6 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/db'
import { verifyToken } from '@/lib/auth'
// PUT /api/highlights/[id]?locale=en - Update highlight
// DELETE /api/highlights/[id]?locale=en - Delete highlight
export async function PUT(
req: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const authHeader = req.headers.get('authorization')
if (!authHeader) {
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
}
const token = authHeader.replace('Bearer ', '')
const decoded = await verifyToken(token)
if (!decoded) {
return NextResponse.json({ success: false, error: 'Invalid token' }, { status: 401 })
}
const body = await req.json()
const { color, note, tags } = body
// Verify ownership
const existingHighlight = await prisma.highlight.findUnique({
where: { id: params.id }
})
if (!existingHighlight || existingHighlight.userId !== decoded.userId) {
return NextResponse.json({ success: false, error: 'Highlight not found' }, { status: 404 })
}
const highlight = await prisma.highlight.update({
where: { id: params.id },
data: {
...(color && { color }),
...(note !== undefined && { note }),
...(tags && { tags })
}
})
return NextResponse.json({ success: true, highlight })
} catch (error) {
console.error('Error updating highlight:', error)
return NextResponse.json({ success: false, error: 'Failed to update highlight' }, { status: 500 })
}
}
export async function DELETE(
req: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const authHeader = req.headers.get('authorization')
if (!authHeader) {
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
}
const token = authHeader.replace('Bearer ', '')
const decoded = await verifyToken(token)
if (!decoded) {
return NextResponse.json({ success: false, error: 'Invalid token' }, { status: 401 })
}
// Verify ownership
const existingHighlight = await prisma.highlight.findUnique({
where: { id: params.id }
})
if (!existingHighlight || existingHighlight.userId !== decoded.userId) {
return NextResponse.json({ success: false, error: 'Highlight not found' }, { status: 404 })
}
await prisma.highlight.delete({
where: { id: params.id }
})
return NextResponse.json({ success: true })
} catch (error) {
console.error('Error deleting highlight:', error)
return NextResponse.json({ success: false, error: 'Failed to delete highlight' }, { status: 500 })
}
}