Adds a new "Read Books" section below "Currently Reading" in the About page. Book reviews with star ratings and comments are fetched from a Directus CMS collection (book_reviews) and displayed with the existing liquid design system. Includes i18n support (EN/DE), show more/less toggle, and graceful fallback when the CMS collection does not exist yet. https://claude.ai/code/session_017E8W9CcHFM5WQVHw74JP34
46 lines
1.0 KiB
TypeScript
46 lines
1.0 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { getBookReviews } from '@/lib/directus';
|
|
|
|
export const runtime = 'nodejs';
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
/**
|
|
* GET /api/book-reviews
|
|
*
|
|
* Loads Book Reviews from Directus CMS
|
|
*
|
|
* Query params:
|
|
* - locale: en or de (default: en)
|
|
*/
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
const locale = searchParams.get('locale') || 'en';
|
|
|
|
const reviews = await getBookReviews(locale);
|
|
|
|
if (reviews && reviews.length > 0) {
|
|
return NextResponse.json({
|
|
bookReviews: reviews,
|
|
source: 'directus'
|
|
});
|
|
}
|
|
|
|
return NextResponse.json({
|
|
bookReviews: null,
|
|
source: 'fallback'
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Error loading book reviews:', error);
|
|
return NextResponse.json(
|
|
{
|
|
bookReviews: null,
|
|
error: 'Failed to load book reviews',
|
|
source: 'error'
|
|
},
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|