journal-quest / scripts /seed.mjs
MATSUMURA Taishi
Add Docker config for Hugging Face Spaces deployment
7d7e1a3
Raw
History Blame Contribute Delete
1.76 kB
// 問題バンクのシード生成スクリプト。
// 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('完了')