```
feat: 添加公司AI管理平台基础架构 添加了完整的FastAPI后端项目结构,包括: - 环境配置文件(.env.example)和项目说明文档(README.md、AGENTS.md) - Dockerfile用于容器化部署 - 核心基础设施:配置管理、数据库连接、调度器、安全认证 - 模块化设计:AI代理、审批流程、审计日志、业务台账等功能模块 - 支持多数据库连接(主库和遗留系统只读库) - AI适配器支持OpenClaw、Hermes、OpenAI兼容接口 - 飞书集成、报表生成、风险监控等企业级功能 - 完整的依赖管理和测试指南 ```
This commit is contained in:
60
app/core/config.py
Normal file
60
app/core/config.py
Normal file
@@ -0,0 +1,60 @@
|
||||
from functools import lru_cache
|
||||
|
||||
from pydantic import Field, field_validator
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
|
||||
|
||||
class Settings(BaseSettings):
|
||||
"""Runtime settings loaded from environment variables and `.env`."""
|
||||
|
||||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
||||
|
||||
app_name: str = "Company AI Management Platform"
|
||||
app_env: str = "local"
|
||||
debug: bool = False
|
||||
api_prefix: str = "/api/v1"
|
||||
api_key: str | None = None
|
||||
cors_origins: list[str] = Field(default_factory=lambda: ["*"])
|
||||
|
||||
database_url: str = "mysql+pymysql://root:password@127.0.0.1:3306/company_ai?charset=utf8mb4"
|
||||
legacy_database_url: str | None = None
|
||||
legacy_project_query: str | None = None
|
||||
legacy_project_code_prefix: str = "LEGACY"
|
||||
redis_url: str = "redis://127.0.0.1:6379/0"
|
||||
|
||||
feishu_base_url: str = "https://open.feishu.cn/open-apis"
|
||||
feishu_app_id: str | None = None
|
||||
feishu_app_secret: str | None = None
|
||||
feishu_verification_token: str | None = None
|
||||
feishu_encrypt_key: str | None = None
|
||||
feishu_default_chat_id: str | None = None
|
||||
|
||||
model_provider: str = "noop"
|
||||
openclaw_base_url: str = "http://127.0.0.1:18789"
|
||||
openclaw_api_key: str | None = None
|
||||
hermes_base_url: str = "http://127.0.0.1:8080"
|
||||
hermes_api_key: str | None = None
|
||||
direct_llm_base_url: str = "https://api.openai.com/v1"
|
||||
direct_llm_api_key: str | None = None
|
||||
direct_llm_model: str = "gpt-4.1-mini"
|
||||
|
||||
scheduler_enabled: bool = False
|
||||
daily_brief_cron_hour: int = 9
|
||||
daily_brief_cron_minute: int = 0
|
||||
weekly_project_report_day_of_week: str = "mon"
|
||||
weekly_project_report_cron_hour: int = 9
|
||||
weekly_project_report_cron_minute: int = 30
|
||||
|
||||
@field_validator("cors_origins", mode="before")
|
||||
@classmethod
|
||||
def parse_cors_origins(cls, value: str | list[str]) -> list[str]:
|
||||
if isinstance(value, list):
|
||||
return value
|
||||
return [item.strip() for item in value.split(",") if item.strip()]
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_settings() -> Settings:
|
||||
"""Return cached application settings."""
|
||||
|
||||
return Settings()
|
||||
Reference in New Issue
Block a user