// 問題バンクのシード生成スクリプト。 // Edge Function jq-generate-problems を Lv1-3 × 易中難 で呼び、DB を満たす。 // // 使い方: // 1) .env に VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY を設定 // 2) Edge Function をデプロイ済み (supabase functions deploy jq-generate-problems) // 3) node scripts/seed.mjs [count] // // count: 各 level×difficulty あたりの生成数 (既定 8) import { readFileSync } from 'node:fs' import { createClient } from '@supabase/supabase-js' function loadEnv() { try { const text = readFileSync(new URL('../.env', import.meta.url), 'utf8') for (const line of text.split('\n')) { const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/) if (m && !process.env[m[1]]) process.env[m[1]] = m[2].replace(/^["']|["']$/g, '') } } catch { /* .env が無くても process.env を使う */ } } loadEnv() const url = process.env.VITE_SUPABASE_URL const anon = process.env.VITE_SUPABASE_ANON_KEY if (!url || !anon) { console.error('VITE_SUPABASE_URL / VITE_SUPABASE_ANON_KEY が未設定です (.env を確認)') process.exit(1) } const count = Number(process.argv[2]) || 8 const levels = [1, 2, 3] const difficulties = ['easy', 'normal', 'hard'] const supabase = createClient(url, anon) for (const level of levels) { for (const difficulty of difficulties) { process.stdout.write(`Lv${level} ${difficulty} … `) const { data, error } = await supabase.functions.invoke('jq-generate-problems', { body: { level, difficulty, count }, }) if (error) { console.log(`✗ ${error.message}`) } else { console.log(`✓ ${data?.kept ?? 0} 件保管 (生成 ${data?.generated ?? '?'})`) } } } console.log('完了')