ILRDF-AI-Translator / db_manager.py
ILRDF-Lowking's picture
Update db_manager.py
4e361bf verified
Raw
History Blame Contribute Delete
2.55 kB
# db_manager.py
from supabase import create_client
import config
# 初始化 Supabase 連線
url = config.SUPABASE_URL
key = config.SUPABASE_KEY
# 💡 防呆檢查
if not url or not key:
print("⚠️ 警告:SUPABASE_URL 或 KEY 尚未設定,將無法使用永久記憶功能!")
supabase = None
else:
supabase = create_client(url, key)
def get_user_tribe(user_id):
"""從雲端讀取使用者的族語選擇,找不到就預設阿美"""
if not supabase: return "阿美"
try:
res = supabase.table("user_preferences").select("tribe").eq("user_id", user_id).execute()
if res.data and len(res.data) > 0:
return res.data[0]['tribe']
except Exception as e:
print(f"❌ 讀取資料庫失敗: {e}")
return "阿美"
# db_manager.py 修正片段
def set_user_tribe(user_id, tribe, display_name="Unknown"):
"""將使用者的族語選擇與暱稱寫入雲端"""
if not supabase: return False
try:
# 💡 加入 display_name 欄位
data = {
"user_id": user_id,
"tribe": tribe,
"display_name": display_name
}
supabase.table("user_preferences").upsert(data).execute()
return True
except Exception as e:
print(f"❌ 寫入資料庫失敗: {e}")
return False
# 💡 旗艦版新增:紀錄互動日誌 (供戰情室分析)
def log_interaction(user_id, tribe, itype, query):
"""紀錄每一次的互動,包含類型與內容"""
if not supabase: return
try:
data = {
"user_id": user_id,
"tribe": tribe,
"interaction_type": itype,
"query_content": query[:200] # 💡 紀錄前 200 字,對接資料庫的 query_content 欄位
}
supabase.table("translation_logs").insert(data).execute()
except Exception as e:
print(f"❌ 紀錄 Log 失敗: {e}")
# 💡 旗艦版新增:紀錄使用者的評分 (👍 好評 / 👎 負評)
def log_feedback(user_id, tribe, feedback_type):
"""將使用者的 👍/👎 回饋寫入資料庫"""
if not supabase: return
try:
data = {
"user_id": user_id,
"tribe": tribe,
"interaction_type": f"feedback_{feedback_type}",
"query_content": f"User gave {feedback_type} feedback" # 💡 這裡也必須對齊 query_content 欄位
}
supabase.table("translation_logs").insert(data).execute()
except Exception as e:
print(f"❌ 紀錄回饋失敗: {e}")