- Add favoriteBibleVersion field to User schema in Prisma - Create API endpoint (/api/user/favorite-version) to get/set favorite version - GET: retrieve user's favorite Bible version - POST: save/update user's favorite Bible version - Enhance Bible reader functionality - Automatically load user's favorite version on mount (logged-in users) - Add star button (⭐) next to version selector to set current version as default - Display success message when favorite version is saved - Fall back to default version if no favorite is set - Add Bible Preferences section to Settings page - Display user's current favorite Bible version in dropdown - Allow users to view and change favorite version - Load all Bible versions (removed 200 limit) to ensure favorite is found - Show confirmation message when version is selected - Add loading state while fetching versions - Fix renderValue in Select component to properly display version names - Add comprehensive debug logging for troubleshooting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
85 lines
2.5 KiB
TypeScript
85 lines
2.5 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
import { prisma } from '@/lib/db'
|
|
import jwt from 'jsonwebtoken'
|
|
|
|
export const runtime = 'nodejs'
|
|
|
|
// Get user's favorite Bible version
|
|
export async function GET(request: Request) {
|
|
try {
|
|
const authHeader = request.headers.get('authorization')
|
|
if (!authHeader?.startsWith('Bearer ')) {
|
|
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
|
|
}
|
|
|
|
const token = authHeader.substring(7)
|
|
const decoded = jwt.verify(token, process.env.JWT_SECRET!) as { userId: string }
|
|
|
|
const user = await prisma.user.findUnique({
|
|
where: { id: decoded.userId },
|
|
select: { favoriteBibleVersion: true }
|
|
})
|
|
|
|
if (!user) {
|
|
return NextResponse.json({ success: false, error: 'User not found' }, { status: 404 })
|
|
}
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
favoriteBibleVersion: user.favoriteBibleVersion
|
|
})
|
|
} catch (error) {
|
|
console.error('Error getting favorite version:', error)
|
|
return NextResponse.json(
|
|
{ success: false, error: 'Failed to get favorite version' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|
|
// Set user's favorite Bible version
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const authHeader = request.headers.get('authorization')
|
|
if (!authHeader?.startsWith('Bearer ')) {
|
|
return NextResponse.json({ success: false, error: 'Unauthorized' }, { status: 401 })
|
|
}
|
|
|
|
const token = authHeader.substring(7)
|
|
const decoded = jwt.verify(token, process.env.JWT_SECRET!) as { userId: string }
|
|
|
|
const body = await request.json()
|
|
const { versionId } = body
|
|
|
|
if (!versionId) {
|
|
return NextResponse.json({ success: false, error: 'Version ID is required' }, { status: 400 })
|
|
}
|
|
|
|
// Verify that the version exists
|
|
const version = await prisma.bibleVersion.findUnique({
|
|
where: { id: versionId }
|
|
})
|
|
|
|
if (!version) {
|
|
return NextResponse.json({ success: false, error: 'Bible version not found' }, { status: 404 })
|
|
}
|
|
|
|
// Update user's favorite version
|
|
await prisma.user.update({
|
|
where: { id: decoded.userId },
|
|
data: { favoriteBibleVersion: versionId }
|
|
})
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: 'Favorite Bible version updated',
|
|
favoriteBibleVersion: versionId
|
|
})
|
|
} catch (error) {
|
|
console.error('Error setting favorite version:', error)
|
|
return NextResponse.json(
|
|
{ success: false, error: 'Failed to set favorite version' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
} |