Spaces:
Sleeping
Sleeping
| """ | |
| 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 | |