128 lines
No EOL
4.6 KiB
JavaScript
Executable file
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(); |