nextav/src/app/api/videos/recommendations/route.ts

48 lines
1.4 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { RecommendationService, RecommendationAlgorithm } from '@/lib/recommendation-service';
export async function GET(request: NextRequest) {
try {
const { searchParams } = new URL(request.url);
const algorithm = (searchParams.get('algorithm') || 'unwatched_first') as RecommendationAlgorithm;
const limit = Math.min(parseInt(searchParams.get('limit') || '20'), 100);
const excludeRecentDays = parseInt(searchParams.get('exclude_recent_days') || '30');
// Validate parameters
if (limit < 1 || limit > 100) {
return NextResponse.json(
{ error: 'Limit must be between 1 and 100' },
{ status: 400 }
);
}
if (excludeRecentDays < 0) {
return NextResponse.json(
{ error: 'Exclude recent days must be non-negative' },
{ status: 400 }
);
}
const service = new RecommendationService();
const recommendations = await service.getRecommendations({
algorithm,
limit,
excludeRecentDays
});
return NextResponse.json({
recommendations,
algorithm,
total_videos: recommendations.length,
total_recommended: recommendations.length
});
} catch (error: any) {
console.error('Recommendation error:', error);
return NextResponse.json(
{ error: error.message || 'Failed to get recommendations' },
{ status: 500 }
);
}
}