Update 35 files

- /src/api.ts
- /src/lib/utils.ts
- /src/lib/neoApi.ts
- /src/lib/mongodb.ts
- /src/lib/favoritesApi.ts
- /src/lib/models/Favorite.ts
- /src/hooks/useTMDBMovies.ts
- /src/hooks/useImageLoader.ts
- /src/hooks/useMovies.ts
- /src/types/movie.ts
- /src/components/SearchResults.tsx
- /src/components/SettingsContent.tsx
- /src/components/MovieCard.tsx
- /src/components/FavoriteButton.tsx
- /src/components/admin/MovieSearch.tsx
- /src/app/page.tsx
- /src/app/movie/[id]/page.tsx
- /src/app/movie/[id]/MovieContent.tsx
- /src/app/api/movies/upcoming/route.ts
- /src/app/api/movies/search/route.ts
- /src/app/api/movies/top-rated/route.ts
- /src/app/api/movies/[id]/route.ts
- /src/app/api/movies/popular/route.ts
- /src/app/api/favorites/route.ts
- /src/app/api/favorites/check/[mediaId]/route.ts
- /src/app/api/favorites/[mediaId]/route.ts
- /src/app/tv/[id]/TVShowContent.tsx
- /src/app/tv/[id]/TVShowPage.tsx
- /src/app/tv/[id]/page.tsx
- /src/app/favorites/page.tsx
- /src/configs/auth.ts
- /next.config.js
- /package.json
- /README.md
- /package-lock.json
This commit is contained in:
2025-01-05 01:43:34 +00:00
parent 3c3f58c7d3
commit 0aa6fb6038
35 changed files with 1656 additions and 548 deletions

View File

@@ -0,0 +1,34 @@
import { NextResponse } from 'next/server';
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.themoviedb.org/3',
headers: {
'Authorization': `Bearer ${process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
}
});
export async function GET(
request: Request,
{ params }: { params: { id: string } }
) {
const id = params.id;
try {
const response = await api.get(`/movie/${id}`, {
params: {
language: 'ru-RU',
append_to_response: 'credits,videos,similar'
}
});
return NextResponse.json(response.data);
} catch (error: any) {
console.error('Error fetching movie details:', error);
return NextResponse.json(
{ error: error.message || 'Failed to fetch movie details' },
{ status: error.response?.status || 500 }
);
}
}

View File

@@ -0,0 +1,37 @@
import { NextResponse } from 'next/server';
import axios from 'axios';
const api = axios.create({
baseURL: 'https://api.themoviedb.org/3',
headers: {
'Authorization': `Bearer ${process.env.NEXT_PUBLIC_TMDB_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
}
});
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const page = searchParams.get('page') || '1';
try {
const response = await api.get('/discover/movie', {
params: {
page,
language: 'ru-RU',
'vote_count.gte': 100,
'vote_average.gte': 1,
sort_by: 'popularity.desc',
include_adult: false,
'primary_release_date.lte': new Date().toISOString().split('T')[0]
}
});
return NextResponse.json(response.data);
} catch (error: any) {
console.error('Error fetching popular movies:', error);
return NextResponse.json(
{ error: error.message || 'Failed to fetch movies' },
{ status: error.response?.status || 500 }
);
}
}

View File

@@ -1,8 +1,5 @@
import { NextResponse } from 'next/server';
import { searchAPI } from '@/lib/api';
const TMDB_API_KEY = process.env.TMDB_API_KEY;
const TMDB_API_URL = 'https://api.themoviedb.org/3';
import { searchAPI } from '@/lib/neoApi';
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
@@ -16,12 +13,15 @@ export async function GET(request: Request) {
}
try {
const { data } = await searchAPI.multiSearch(query);
return NextResponse.json(data);
} catch (error) {
const response = await searchAPI.multiSearch(query);
return NextResponse.json(response.data);
} catch (error: any) {
console.error('Error searching:', error);
return NextResponse.json(
{ error: 'Failed to search' },
{
error: 'Failed to search',
details: error.message
},
{ status: 500 }
);
}

View File

@@ -0,0 +1,19 @@
import { NextResponse } from 'next/server';
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const page = searchParams.get('page') || '1';
const response = await fetch(
`https://api.themoviedb.org/3/movie/top_rated?page=${page}`,
{
headers: {
'Authorization': `Bearer ${process.env.TMDB_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
}
);
const data = await response.json();
return NextResponse.json(data);
}

View File

@@ -0,0 +1,19 @@
import { NextResponse } from 'next/server';
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const page = searchParams.get('page') || '1';
const response = await fetch(
`https://api.themoviedb.org/3/movie/upcoming?page=${page}`,
{
headers: {
'Authorization': `Bearer ${process.env.TMDB_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
}
);
const data = await response.json();
return NextResponse.json(data);
}