20260115200016_77878c31-17d4-4bcb-a3f3-ba4338fed84d.sql 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. -- Supprimer les anciens cron jobs s'ils existent
  2. SELECT cron.unschedule(jobname) FROM cron.job WHERE jobname IN ('fetch-active-feeds', 'purge-old-articles-daily');
  3. -- Créer une fonction pour récupérer les articles de tous les feeds actifs
  4. CREATE OR REPLACE FUNCTION public.trigger_fetch_all_feeds()
  5. RETURNS void
  6. LANGUAGE plpgsql
  7. SECURITY DEFINER
  8. SET search_path TO 'public'
  9. AS $func$
  10. DECLARE
  11. feed_record RECORD;
  12. cron_secret TEXT;
  13. BEGIN
  14. -- Récupérer le secret depuis les paramètres de la base
  15. cron_secret := current_setting('app.cron_secret', true);
  16. IF cron_secret IS NULL OR cron_secret = '' THEN
  17. RAISE WARNING 'app.cron_secret not configured - skipping feed fetch';
  18. RETURN;
  19. END IF;
  20. FOR feed_record IN
  21. SELECT id, url FROM public.feeds WHERE status = 'active'
  22. LOOP
  23. PERFORM net.http_post(
  24. url := 'https://wftyukugedtojizgatwj.supabase.co/functions/v1/fetch-rss',
  25. headers := jsonb_build_object(
  26. 'Content-Type', 'application/json',
  27. 'x-cron-secret', cron_secret
  28. ),
  29. body := jsonb_build_object(
  30. 'feedId', feed_record.id,
  31. 'feedUrl', feed_record.url
  32. )
  33. );
  34. END LOOP;
  35. END;
  36. $func$;
  37. -- Créer une fonction pour déclencher la purge des articles
  38. CREATE OR REPLACE FUNCTION public.trigger_purge_articles()
  39. RETURNS void
  40. LANGUAGE plpgsql
  41. SECURITY DEFINER
  42. SET search_path TO 'public'
  43. AS $func$
  44. DECLARE
  45. cron_secret TEXT;
  46. BEGIN
  47. cron_secret := current_setting('app.cron_secret', true);
  48. IF cron_secret IS NULL OR cron_secret = '' THEN
  49. RAISE WARNING 'app.cron_secret not configured - skipping purge';
  50. RETURN;
  51. END IF;
  52. PERFORM net.http_post(
  53. url := 'https://wftyukugedtojizgatwj.supabase.co/functions/v1/purge-articles',
  54. headers := jsonb_build_object(
  55. 'Content-Type', 'application/json',
  56. 'x-cron-secret', cron_secret
  57. ),
  58. body := '{"scheduled": true}'::jsonb
  59. );
  60. END;
  61. $func$;
  62. -- Programmer les cron jobs pour appeler ces fonctions
  63. SELECT cron.schedule(
  64. 'fetch-active-feeds',
  65. '*/10 * * * *',
  66. 'SELECT public.trigger_fetch_all_feeds()'
  67. );
  68. SELECT cron.schedule(
  69. 'purge-old-articles-daily',
  70. '0 3 * * *',
  71. 'SELECT public.trigger_purge_articles()'
  72. );