Files
biblical-guide.com/app/api/user/favorite-version/route.ts
Andrei 2ae2f029ec feat: add user favorite Bible version preference system
- 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>
2025-09-30 09:50:01 +00:00

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 }
)
}
}