espace-paie-odentas/scripts/check-feminisations-table.mjs
2025-10-12 17:05:46 +02:00

128 lines
No EOL
4.6 KiB
JavaScript
Executable file

#!/usr/bin/env node
/**
* Script pour vérifier et créer la table professions_feminisations
*/
import { createClient } from '@supabase/supabase-js';
import { config } from 'dotenv';
// Charger les variables d'environnement
config({ path: '.env.local' });
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
if (!supabaseUrl || !supabaseServiceKey) {
console.error('❌ Variables d\'environnement manquantes');
process.exit(1);
}
const supabase = createClient(supabaseUrl, supabaseServiceKey);
async function checkAndCreateTable() {
try {
console.log('🔍 Vérification de la table professions_feminisations...');
// Tester si la table existe en faisant une requête simple
const { data, error } = await supabase
.from('professions_feminisations')
.select('profession_code')
.limit(1);
if (error) {
if (error.message.includes('does not exist')) {
console.log('❌ La table n\'existe pas. Création en cours...');
// Créer la table avec SQL direct
const createTableSQL = `
-- Créer la table professions_feminisations
create table if not exists public.professions_feminisations (
id uuid primary key default gen_random_uuid(),
profession_code varchar not null unique,
profession_label varchar not null,
profession_feminine varchar not null,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
-- Créer un index sur le code profession
create index if not exists idx_professions_feminisations_code
on public.professions_feminisations(profession_code);
-- Activer RLS
alter table public.professions_feminisations enable row level security;
-- Policy de lecture
drop policy if exists professions_feminisations_read on public.professions_feminisations;
create policy professions_feminisations_read on public.professions_feminisations
for select using (auth.uid() is not null);
-- Policy d'écriture pour le staff
drop policy if exists professions_feminisations_staff_write on public.professions_feminisations;
create policy professions_feminisations_staff_write on public.professions_feminisations
for all using (
exists (
select 1 from public.staff_users s
where s.user_id = auth.uid() and coalesce(s.is_staff, false) = true
)
);
-- Fonction pour updated_at
create or replace function public.handle_updated_at()
returns trigger as $$
begin
new.updated_at = now();
return new;
end;
$$ language plpgsql;
-- Trigger pour updated_at
drop trigger if exists trigger_professions_feminisations_updated_at on public.professions_feminisations;
create trigger trigger_professions_feminisations_updated_at
before update on public.professions_feminisations
for each row execute function public.handle_updated_at();
`;
const { error: createError } = await supabase.rpc('exec_sql', {
sql: createTableSQL
});
if (createError) {
console.error('❌ Erreur lors de la création de la table:', createError);
// Si rpc n'existe pas, essayons une approche différente
console.log('🔧 Tentative de création manuelle...');
console.log('⚠️ Veuillez exécuter manuellement cette migration dans l\'éditeur SQL de Supabase:');
console.log(createTableSQL);
return;
}
console.log('✅ Table créée avec succès !');
} else {
console.error('❌ Erreur lors de la vérification:', error);
return;
}
} else {
console.log('✅ La table existe déjà');
console.log(`📊 Nombre d'enregistrements: ${data?.length || 0}`);
}
// Vérifier à nouveau après création
const { data: finalData, error: finalError } = await supabase
.from('professions_feminisations')
.select('profession_code', { count: 'exact' })
.limit(1);
if (finalError) {
console.error('❌ La table n\'est toujours pas accessible:', finalError);
} else {
console.log('✅ Table accessible et fonctionnelle');
}
} catch (error) {
console.error('❌ Erreur:', error);
}
}
checkAndCreateTable();