diff --git a/src/lib/migrateData.ts b/src/lib/migrateData.ts new file mode 100644 index 0000000..c92e174 --- /dev/null +++ b/src/lib/migrateData.ts @@ -0,0 +1,63 @@ +import dotenv from 'dotenv'; +import { createClient } from '@supabase/supabase-js'; + +dotenv.config(); + +const cloudUrl = process.env.CLOUD_SUPABASE_URL; +// 서비스 역할 키가 유효하지 않으면 CLOUD_SUPABASE_ANON_KEY 또는 VITE_SUPABASE_ANON_KEY를 사용합니다. +const cloudKey = process.env.CLOUD_SUPABASE_SERVICE_ROLE_KEY || process.env.CLOUD_SUPABASE_ANON_KEY || process.env.VITE_SUPABASE_ANON_KEY; +const onpremUrl = process.env.ONPREM_SUPABASE_URL; +// 서비스 역할 키가 유효하지 않으면 ONPREM_SUPABASE_ANON_KEY 또는 VITE_SUPABASE_ANON_KEY를 사용합니다. +const onpremKey = process.env.ONPREM_SUPABASE_SERVICE_ROLE_KEY || process.env.ONPREM_SUPABASE_ANON_KEY || process.env.VITE_SUPABASE_ANON_KEY; + +if (!cloudUrl || !cloudKey || !onpremUrl || !onpremKey) { + console.error('환경 변수가 설정되지 않았습니다. .env 파일을 확인하세요.'); + process.exit(1); +} + +const cloud = createClient(cloudUrl, cloudKey); +const onprem = createClient(onpremUrl, onpremKey); + +// 복사할 테이블 목록을 정의하세요. +const tables = [ + 'users', + 'accounts', + 'transactions', + // 필요에 따라 추가 테이블을 여기에 입력 +]; + +async function migrateTable(table: string) { + console.log(`Migrating table: ${table}`); + const { data, error } = await cloud.from(table).select('*'); + if (error) { + // 테이블이 없으면 스킵 + if (error.code === '42P01') { + console.warn(`Table ${table} not found in Cloud DB, skipping.`); + return; + } + console.error(`Error fetching ${table}:`, error); + return; + } + if (!data || data.length === 0) { + console.log(`${table} has no data to migrate.`); + return; + } + const { error: insertError } = await onprem.from(table).upsert(data); + if (insertError) { + console.error(`Error inserting into ${table}:`, insertError); + } else { + console.log(`Migrated ${data.length} rows into ${table}`); + } +} + +async function main() { + for (const table of tables) { + await migrateTable(table); + } + console.log('Migration complete.'); +} + +main().catch(err => { + console.error('Migration failed:', err); + process.exit(1); +});