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

@@ -9,7 +9,6 @@ from sqlalchemy.orm import Session, sessionmaker
from app.core.config import get_settings
from app.core.config import Settings
from app.core.database import Base
from app.core.security import OperationsDisabledError
from app.modules.audit.models import AuditLog
from app.modules.audit.schemas import AuditLogCreate
from app.modules.audit.service import AuditService
@@ -39,13 +38,19 @@ def test_audit_and_outbox_rollback_with_business_transaction() -> None:
assert db.scalar(select(func.count()).select_from(DomainEvent)) == 0
def test_business_service_enforces_read_only_policy(monkeypatch: pytest.MonkeyPatch) -> None:
def test_read_only_mode_allows_local_risk_state(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setenv("READ_ONLY_MODE", "true")
get_settings.cache_clear()
engine = create_engine("sqlite://")
Base.metadata.create_all(engine)
try:
with pytest.raises(OperationsDisabledError):
RiskService(Session()).generate_events(actor="pytest")
with Session(engine) as db:
result = RiskService(db).generate_events(actor="pytest")
assert result["created"] == 0
assert db.scalar(select(func.count()).select_from(AuditLog)) == 1
finally:
engine.dispose()
get_settings.cache_clear()