File size: 1,386 Bytes
e66cfb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
"""
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