feat: 添加飞书用户模块和订阅功能支持

- 新增feishu_users模块用于处理飞书用户身份验证和权限管理
- 新增subscriptions模块用于处理订阅相关功能
- 新增personalization模块用于个性化服务
- 在alembic迁移配置中注册新的模型模块
- 在API路由器中添加feishu_users和subscriptions路由
- 实现事件调度服务的改进,包括错误处理和状态更新优化
- 添加飞书命令处理的权限检查机制
- 实现飞书应用票据事件处理
- 改进审计日志记录功能
```
This commit is contained in:
2026-07-27 08:02:17 +08:00
parent db751f03b4
commit d7db84571d
148 changed files with 17110 additions and 765 deletions

View File

@@ -46,14 +46,23 @@ def create_scheduler(app: FastAPI | None = None) -> Any:
enqueue_market_report,
enqueue_project_weekly_push,
enqueue_risk_progress_push,
enqueue_subscription_cycle,
enqueue_work_daily_push,
enqueue_work_weekly_push,
)
from app.modules.observability.service import ObservabilityService
from app.modules.personalization.services import ConversationService
from app.modules.reports.services import ReportService
settings = get_settings()
scheduler = BackgroundScheduler(timezone="Asia/Shanghai")
scheduler = BackgroundScheduler(
timezone="Asia/Shanghai",
job_defaults={
"coalesce": True,
"max_instances": 1,
"misfire_grace_time": 300,
},
)
def deliver_report(
state_key: str,
@@ -189,7 +198,19 @@ def create_scheduler(app: FastAPI | None = None) -> Any:
finally:
db.close()
if settings.lifecycle_pipeline_enabled and not settings.read_only_mode:
def run_subscription_cycle() -> None:
dispatch = enqueue_subscription_cycle(actor=ActorValue.SCHEDULER)
_set_state(app, "last_subscription_cycle", dispatch)
def run_personalization_retention_cleanup() -> None:
db = SessionLocal()
try:
deleted = ConversationService(db).cleanup_expired_globally()
_set_state(app, "last_personalization_retention_cleanup", deleted)
finally:
db.close()
if settings.lifecycle_pipeline_enabled:
scheduler.add_job(
run_daily_lifecycle,
trigger="cron",
@@ -266,7 +287,7 @@ def create_scheduler(app: FastAPI | None = None) -> Any:
id="event_dispatch",
replace_existing=True,
)
if settings.market_analysis_enabled and not settings.read_only_mode:
if settings.market_analysis_enabled:
scheduler.add_job(
run_market_premarket,
trigger="cron",
@@ -301,9 +322,23 @@ def create_scheduler(app: FastAPI | None = None) -> Any:
id="scheduler_heartbeat",
replace_existing=True,
)
if settings.feishu_user_features_enabled:
scheduler.add_job(
run_subscription_cycle,
trigger="interval",
minutes=1,
id="subscription_delivery_cycle",
replace_existing=True,
)
scheduler.add_job(
run_personalization_retention_cleanup,
trigger="interval",
minutes=1,
id="personalization_retention_cleanup",
replace_existing=True,
)
if (
not settings.lifecycle_pipeline_enabled
and not settings.read_only_mode
and settings.legacy_sync_enabled
and settings.legacy_project_query
):
@@ -317,7 +352,6 @@ def create_scheduler(app: FastAPI | None = None) -> Any:
)
if (
not settings.lifecycle_pipeline_enabled
and not settings.read_only_mode
and settings.legacy_sync_enabled
and settings.legacy_task_query
):