
    p%j                     j    d Z ddlmZ ddlmZ ddlmZmZ  G d de      Zedefd       Z	 e	       Z
y	)
ud  
應用程式設定模組。

把所有「會因環境而變」的設定值集中在這裡,從環境變數讀取。
好處:
  1. 不會把密鑰寫死在程式碼
  2. 開發 / 測試 / 上線 環境可以用不同設定
  3. 任何模組要拿設定值,都從 `from app.config import settings` 取得,
     不要散落在程式各處 os.environ.get(...)
    )	lru_cache)Field)BaseSettingsSettingsConfigDictc                      e Zd ZU dZ edd      Zeed<    edd      Zeed<    ed	
      Z	eed<    ed
      Z
eed<    edd      Zeed<    ed
      Zeed<    edd      Zeed<    edd      Zeed<    ed
      Zeed<    ed
      Zeed<    ed
      Zeed<    edd       Zeed!<    ed"
      Zeed#<    ed$
      Zeed%<    ed&
      Zeed'<    edd(      Zeed)<    ed*d+      Zeed,<    edd-      Zeed.<    edd/      Zeed0<    edd1      Zeed2<    ed3d4      Zeed5<    ed6d7d*d89      Zy:);Settingsu   應用程式的所有設定值。

    Pydantic 會自動從環境變數讀取對應名稱的值,並做型別驗證。
    例如 `ACCESS_TOKEN_EXPIRE_MINUTES=15` 會被讀成 int 15。
    developmentz"development / staging / production)defaultdescriptionENVIRONMENTzIpostgresql+asyncpg://coba:coba_dev_password_change_me@localhost:5432/cobau8   PostgreSQL 連線字串(async 版,使用 asyncpg driver)DATABASE_URLzredis://localhost:6379/0)r
   	REDIS_URLzhttp://localhost:6333
QDRANT_URLdev_secret_key_replace_meu9   簽 JWT 用的密鑰,上線前必須換成隨機 64 bytesJWT_SECRET_KEYHS256JWT_ALGORITHM   u   access token 有效期(分鐘)ACCESS_TOKEN_EXPIRE_MINUTES   u   refresh token 有效期(天)REFRESH_TOKEN_EXPIRE_DAYSzowner@example.comSEED_OWNER_EMAILzChangeMe123!SEED_OWNER_PASSWORDOwnerSEED_OWNER_DISPLAY_NAME u+   Anthropic API key,留空則 AI 功能停用ANTHROPIC_API_KEYzclaude-haiku-4-5CLAUDE_MODEL_HAIKUzclaude-sonnet-4-6CLAUDE_MODEL_SONNETzclaude-opus-4-7CLAUDE_MODEL_OPUSuD   Claude Code OAuth token(走 Max 訂閱方案,5 hour rate limit pool)CLAUDE_CODE_OAUTH_TOKENTuK   True=Cooper LINE 對話走 claude_agent_sdk(訂閱);False=用 anthropic APIUSE_CLAUDE_SDKzLINE Messaging API Channel IDLINE_CHANNEL_IDu-   LINE Channel secret(用來驗 webhook 簽章)LINE_CHANNEL_SECRETu@   LINE Channel access token(長期版,呼叫 reply / push API 用)LINE_CHANNEL_ACCESS_TOKENzuploads/lineu    LINE 媒體下載落地資料夾LINE_MEDIA_DIRz.envzutf-8ignore)env_fileenv_file_encodingcase_sensitiveextraN) __name__
__module____qualname____doc__r   r   str__annotations__r   r   r   r   r   r   intr   r   r   r   r   r   r   r    r!   r"   boolr#   r$   r%   r&   r   model_config     ./volume1/homes/robertsu/coba/app/app/config.pyr   r      s    ]@deKe [NL#  #=>Is> $;<J<  +ONC  w/M3/',REe'ff%*1B`%asa "*=>c>$^<<#(#9S9 #2;hisi#,>??$-@AA"+<=s=
 $)Z$S 
 !aND  !9XYOSY$R=lmm%*V&s 
  DfgNCg &!	Lr6   r   returnc                      t               S )u   取得 Settings 單例。

    用 lru_cache 確保整個應用程式只 new 一次 Settings,
    避免每個請求都重讀環境變數。
    )r   r5   r6   r7   get_settingsr:   ^   s     :r6   N)r/   	functoolsr   pydanticr   pydantic_settingsr   r   r   r:   settingsr5   r6   r7   <module>r?      sH   	    >J| JZ h   >r6   