mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 01:35:39 -04:00
- Delete lib/api/errors.ts and lib/api/auth-guard.ts, inline NextResponse.json() error responses directly in route handlers - Replace non-standard amber CSS variables with primary/primary-foreground - Regenerate shadcn UI components with biome-ignore comments - Add CLAUDE.md for repository guidance - Update dependencies and pnpm lockfile Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { type NextRequest, NextResponse } from "next/server";
|
|
import { searchMovies, searchMulti, searchTv } from "@/lib/tmdb/client";
|
|
import type { TmdbSearchResponse } from "@/lib/tmdb/types";
|
|
|
|
export async function GET(req: NextRequest) {
|
|
const query = req.nextUrl.searchParams.get("query");
|
|
const type = req.nextUrl.searchParams.get("type");
|
|
|
|
if (!query)
|
|
return NextResponse.json(
|
|
{ error: "query parameter is required" },
|
|
{ status: 400 },
|
|
);
|
|
|
|
let results: TmdbSearchResponse;
|
|
if (type === "movie") {
|
|
results = await searchMovies(query);
|
|
} else if (type === "tv") {
|
|
results = await searchTv(query);
|
|
} else {
|
|
results = await searchMulti(query);
|
|
}
|
|
|
|
// Filter out person results from multi search
|
|
const filtered = results.results.filter(
|
|
(r) => r.media_type !== "person" || type,
|
|
);
|
|
|
|
return NextResponse.json({
|
|
results: filtered.map((r) => ({
|
|
tmdbId: r.id,
|
|
type: r.media_type ?? type,
|
|
title: r.title ?? r.name,
|
|
overview: r.overview,
|
|
releaseDate: r.release_date ?? r.first_air_date,
|
|
posterPath: r.poster_path,
|
|
popularity: r.popularity,
|
|
voteAverage: r.vote_average,
|
|
})),
|
|
});
|
|
}
|