新增資料庫架構
This commit is contained in:
137
scripts/test-supabase-connection.js
Normal file
137
scripts/test-supabase-connection.js
Normal file
@@ -0,0 +1,137 @@
|
||||
// 心願星河 - Supabase 連接測試腳本
|
||||
// 使用方法: npm run test-supabase
|
||||
|
||||
const { createClient } = require("@supabase/supabase-js")
|
||||
require("dotenv").config({ path: ".env.local" })
|
||||
|
||||
async function testSupabaseConnection() {
|
||||
console.log("🔍 測試 Supabase 連接...\n")
|
||||
|
||||
// 檢查環境變數
|
||||
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
|
||||
const supabaseKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
||||
|
||||
if (!supabaseUrl || !supabaseKey) {
|
||||
console.error("❌ 環境變數未設置")
|
||||
console.log("請確認 .env.local 檔案中包含:")
|
||||
console.log("- NEXT_PUBLIC_SUPABASE_URL")
|
||||
console.log("- NEXT_PUBLIC_SUPABASE_ANON_KEY")
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log("✅ 環境變數已設置")
|
||||
console.log(`📍 Supabase URL: ${supabaseUrl}`)
|
||||
console.log(`🔑 API Key: ${supabaseKey.substring(0, 20)}...`)
|
||||
|
||||
// 創建 Supabase 客戶端
|
||||
const supabase = createClient(supabaseUrl, supabaseKey)
|
||||
|
||||
try {
|
||||
// 測試基本連接
|
||||
console.log("\n🔗 測試基本連接...")
|
||||
const { data, error } = await supabase.from("wishes").select("count").limit(1)
|
||||
|
||||
if (error) {
|
||||
console.error("❌ 連接失敗:", error.message)
|
||||
return false
|
||||
}
|
||||
|
||||
console.log("✅ 基本連接成功")
|
||||
|
||||
// 測試表格存在性
|
||||
console.log("\n📊 檢查表格結構...")
|
||||
const tables = ["wishes", "wish_likes", "user_settings", "migration_log", "system_stats"]
|
||||
|
||||
for (const table of tables) {
|
||||
try {
|
||||
const { data, error } = await supabase.from(table).select("*").limit(1)
|
||||
|
||||
if (error) {
|
||||
console.log(`❌ 表格 ${table}: ${error.message}`)
|
||||
} else {
|
||||
console.log(`✅ 表格 ${table}: 正常`)
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(`❌ 表格 ${table}: ${err.message}`)
|
||||
}
|
||||
}
|
||||
|
||||
// 測試視圖
|
||||
console.log("\n👁️ 檢查視圖...")
|
||||
const views = ["wishes_with_likes", "public_wishes", "popular_wishes"]
|
||||
|
||||
for (const view of views) {
|
||||
try {
|
||||
const { data, error } = await supabase.from(view).select("*").limit(1)
|
||||
|
||||
if (error) {
|
||||
console.log(`❌ 視圖 ${view}: ${error.message}`)
|
||||
} else {
|
||||
console.log(`✅ 視圖 ${view}: 正常`)
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(`❌ 視圖 ${view}: ${err.message}`)
|
||||
}
|
||||
}
|
||||
|
||||
// 測試函數
|
||||
console.log("\n⚙️ 測試函數...")
|
||||
try {
|
||||
const { data, error } = await supabase.rpc("get_wishes_stats")
|
||||
|
||||
if (error) {
|
||||
console.log(`❌ 函數 get_wishes_stats: ${error.message}`)
|
||||
} else {
|
||||
console.log("✅ 函數 get_wishes_stats: 正常")
|
||||
console.log("📈 統計數據:", JSON.stringify(data, null, 2))
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(`❌ 函數測試失敗: ${err.message}`)
|
||||
}
|
||||
|
||||
// 測試存儲
|
||||
console.log("\n🗂️ 檢查存儲桶...")
|
||||
try {
|
||||
const { data: buckets, error } = await supabase.storage.listBuckets()
|
||||
|
||||
if (error) {
|
||||
console.log(`❌ 存儲桶檢查失敗: ${error.message}`)
|
||||
} else {
|
||||
const wishBuckets = buckets.filter((bucket) => bucket.id === "wish-images" || bucket.id === "wish-thumbnails")
|
||||
|
||||
if (wishBuckets.length === 2) {
|
||||
console.log("✅ 存儲桶設置完成")
|
||||
wishBuckets.forEach((bucket) => {
|
||||
console.log(` - ${bucket.id}: ${bucket.public ? "公開" : "私密"}`)
|
||||
})
|
||||
} else {
|
||||
console.log(`⚠️ 存儲桶不完整,找到 ${wishBuckets.length}/2 個`)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(`❌ 存儲桶檢查失敗: ${err.message}`)
|
||||
}
|
||||
|
||||
console.log("\n🎉 Supabase 連接測試完成!")
|
||||
return true
|
||||
} catch (error) {
|
||||
console.error("❌ 測試過程中發生錯誤:", error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// 執行測試
|
||||
testSupabaseConnection()
|
||||
.then((success) => {
|
||||
if (success) {
|
||||
console.log("\n✅ 所有測試通過,可以開始使用 Supabase!")
|
||||
process.exit(0)
|
||||
} else {
|
||||
console.log("\n❌ 測試失敗,請檢查配置")
|
||||
process.exit(1)
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("測試腳本執行失敗:", error)
|
||||
process.exit(1)
|
||||
})
|
Reference in New Issue
Block a user