tMDB.ts 2.14 KB
import type { RuntimeConfig } from "nuxt/schema";

export function useTMDB() {
  const runtimeconfig: RuntimeConfig = useRuntimeConfig();
  const apiUrl = runtimeconfig.public.apiTMDBUrl;
  const apiKey = runtimeconfig.public.apiTMDBSecret;

  /**
   * Fetch popular movies.
   * @param page
   */
  const fetchPopularMovies = async (page: number) => {
    try {
      const response = await fetch(`${apiUrl}/movie/popular?api_key=${apiKey}&language=fr-FR&page=${page}`);
      if (!response.ok) throw new Error("An error occurred when fetching popular movies");
      return await response.json();
    }
    catch (error) {
      throw new Error(`Error fetching popular movies: ${error}`);
    }
  };

  /**
   * Search movies
   * @param query
   * @param page
   */
  const searchMovies = async (query: string, page: number) => {
    try {
      const response = await fetch(
        `${apiUrl}/search/movie?api_key=${apiKey}&language=fr-FR&query=${encodeURIComponent(query)}&page=${page}`,
      );
      if (!response.ok) throw new Error("An error occurred when searching movies");
      return await response.json();
    }
    catch (error) {
      throw new Error(`Error searching movies: ${error}`);
    }
  };

  /**
   * Fetch movie details by id.
   * @param id
   */
  const fetchMovieDetails = async (id: number | string) => {
    try {
      const response = await fetch(`${apiUrl}/movie/${id}?api_key=${apiKey}&language=fr-FR`);
      if (!response.ok) throw new Error("An error occurred when fetching movie details");
      return await response.json();
    }
    catch (error) {
      throw new Error(`Error fetching details: ${error}`);
    }
  };

  /**
   * Fetch movie credits
   */
  const fetchMovieCredits = async (id: number | string) => {
    try {
      const response = await fetch(`${apiUrl}/movie/${id}/credits?api_key=${apiKey}&language=fr-FR`);
      if (!response.ok) throw new Error("An error occurred when fetching movie credits");
      return await response.json();
    }
    catch (error) {
      throw new Error(`Error fetching movie credits: ${error}`);
    }
  };

  return { fetchPopularMovies, searchMovies, fetchMovieDetails, fetchMovieCredits };
}