import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' // Fonction pour récupérer la liste des changements de personne en fonction de la pagination async function getChangedPersons(apiKey: string, page: number): Promise { const apiUrl = `https://api.themoviedb.org/3/person/changes?page=${page}&api_key=${apiKey}`; const response = await fetch(apiUrl); const data = await response.json(); return data; } async function getPersonDetails(apiKey: string, personId: number): Promise { // Appeler l'API TMDB pour les détails de la personne en français const frenchUrl = `https://api.themoviedb.org/3/person/${personId}?api_key=${apiKey}&language=fr-FR`; const frenchResponse = await fetch(frenchUrl); const frenchData = await frenchResponse.json(); // Appeler l'API TMDB pour les détails de la personne en anglais const englishUrl = `https://api.themoviedb.org/3/person/${personId}?api_key=${apiKey}&language=en-US`; const englishResponse = await fetch(englishUrl); const englishData = await englishResponse.json(); // Retourner les détails combinés return { french: frenchData, english: englishData, }; } // Fonction pour mettre à jour les tables Supabase correspondantes async function updateSupabaseTables(supabase: any, personDetails: any) { const personData = personDetails.english; // Utilisez les détails en anglais comme base try { // Mettre à jour la table tmdb_person const { error: errorTmdbPerson } = await supabase .from('tmdb_person') .upsert([ { id: personData.id, adult: personData.adult || false, also_known_as: personData.also_known_as || [], birthday: personData.birthday || null, deathday: personData.deathday || null, gender: personData.gender || null, homepage: personData.homepage || null, imdb_id: personData.imdb_id || null, known_for_department: personData.known_for_department || null, name: personData.name || null, place_of_birth: personData.place_of_birth || null, popularity: personData.popularity || null, profile_path: personData.profile_path || null, }, ]); if (errorTmdbPerson) { console.error('Erreur lors de la mise à jour de la table tmdb_person:', errorTmdbPerson); } // Mettre à jour la table tmdb_person_translation const { error: errorTmdbPersonTranslation } = await supabase .from('tmdb_person_translation') .upsert([ { person: personData.id, language: 'en', // La langue en anglais biography: personData.biography || null, }, { person: personDetails.french.id, language: 'fr', // La langue en français biography: personDetails.french.biography || null, }, ]); if (errorTmdbPersonTranslation) { console.error('Erreur lors de la mise à jour de la table tmdb_person_translation:', errorTmdbPersonTranslation); } } catch (error) { console.error('Erreur globale lors de la mise à jour des tables Supabase:', error); throw error; } } Deno.serve(async (req: Request) => { const authHeader = req.headers.get('Authorization')! const supabase = createClient( Deno.env.get('SUPABASE_URL') ?? '', Deno.env.get('SUPABASE_ANON_KEY') ?? '', { global: { headers: { Authorization: authHeader } } } ) const tmdbApiKey = Deno.env.get('TMDB_API_KEY'); let currentPage = 1; let errorCount = 0; try { // Boucle jusqu'à ce que toutes les pages soient traitées while (true) { // Récupérer les changements de personne pour la page actuelle const changedPersonsResponse = await getChangedPersons(tmdbApiKey,currentPage) const changedPersons = changedPersonsResponse.results // Quitter la boucle si aucune personne n'est changée sur la page actuelle if (changedPersons.length === 0) { break } // Traiter chaque personne changée for (const person of changedPersons) { try { // Récupérer les détails de la personne const personDetails = await getPersonDetails(tmdbApiKey, person.id); // Mettre à jour les tables Supabase await updateSupabaseTables(supabase, personDetails); // Attendre un court délai pour éviter les restrictions de l'API TMDB await new Promise((resolve) => setTimeout(resolve, 1000)); } catch (error) { console.error(`Erreur lors du traitement de la personne ${person.id}:`, error); errorCount++; } } // Passer à la page suivante currentPage++ } } catch (error) { console.error('Erreur globale:', error); errorCount++; } finally { if (errorCount > 0) { console.error(`Nombre total d'erreurs: ${errorCount}`); return new Response(JSON.stringify({ error: `${errorCount} erreurs se sont produites`, args: `apiKey: ${tmdbApiKey}, supabase_anon_key: ${Deno.env.get('SUPABASE_ANON_KEY')}, supabase_url ${Deno.env.get('SUPABASE_URL')}` }), { headers: { 'Content-Type': 'application/json' }, status: 500, }); } else { return new Response(JSON.stringify({ msg: 'Mise à jour terminée', args: `apiKey: ${tmdbApiKey}, supabase_anon_key: ${Deno.env.get('SUPABASE_ANON_KEY')}, supabase_url ${Deno.env.get('SUPABASE_URL')}` }), { headers: { 'Content-Type': 'application/json' }, status: 200, }); } } })