30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
"""龙虾 Agent 运行时配置(单行表 id=1,运行期可改)。
|
||
|
||
- 该表最多 1 行;服务端在首次读时自动 upsert。
|
||
- 字段为空/NULL 时 fallback 到 `.env`(`settings.LOBSTER_*`),做到 "UI 配 > .env 兜底"。
|
||
- api_key / callback_secret 走 Fernet 加密存储。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from sqlalchemy import Integer, String, Text
|
||
from sqlalchemy.orm import Mapped, mapped_column
|
||
|
||
from app.db.base import Base, TimestampMixin
|
||
|
||
|
||
class LobsterConfig(Base, TimestampMixin):
|
||
__tablename__ = "lobster_config"
|
||
|
||
# 单例:固定 id = 1
|
||
id: Mapped[int] = mapped_column(primary_key=True, default=1)
|
||
|
||
api_base: Mapped[str | None] = mapped_column(String(255), nullable=True)
|
||
# Fernet 密文(可为空,表示使用 .env 或未配置走 mock)
|
||
api_key_cipher: Mapped[str | None] = mapped_column(Text, nullable=True)
|
||
callback_secret_cipher: Mapped[str | None] = mapped_column(Text, nullable=True)
|
||
|
||
timeout_seconds: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||
poll_interval_seconds: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||
|
||
note: Mapped[str | None] = mapped_column(String(255), nullable=True)
|