""" firebase_init.py ---------------- Firebase Admin SDK 初始化(單例模式)。 放在專案根目錄,其他模組 import 即可。 """ from __future__ import annotations import os, json from pathlib import Path _db = None # 全域單例 def get_db(): """取得 Firestore client(延遲初始化)。""" global _db if _db is not None: return _db try: import firebase_admin from firebase_admin import credentials, firestore except ImportError: raise RuntimeError( "請先安裝 firebase-admin:pip install firebase-admin --break-system-packages" ) if firebase_admin._apps: _db = firestore.client() return _db # 優先讀取 firebase_key.json(本機開發) key_file = Path(__file__).resolve().parent / "firebase_key.json" if key_file.exists(): cred = credentials.Certificate(str(key_file)) else: # 從環境變數讀取(Hugging Face Secrets) sa_json = os.getenv("FIREBASE_SERVICE_ACCOUNT") if not sa_json: raise RuntimeError( "找不到 Firebase 憑證。請放置 firebase_key.json 或設定環境變數 FIREBASE_SERVICE_ACCOUNT。" ) cred = credentials.Certificate(json.loads(sa_json)) firebase_admin.initialize_app(cred) _db = firestore.client() return _db