Skip to content

Releases: LiteSuggarDEV/nonebot_plugin_value

V1.0.0

04 Apr 03:48
b7dd191

Choose a tag to compare

nonebot-plugin-value v1.0.0 正式版发行说明

里程碑版本发布 | 全面架构重构 | 生产级稳定就绪

本次发布是项目从0.x开发阶段到1.0正式版的重大里程碑,完成了核心架构的深度重构,解决了所有已知的稳定性和一致性问题,大幅提升了并发性能和可维护性,正式进入生产就绪阶段。

🚨 破坏性变更

1. 异常体系重命名(必须修改)

  • 将原内部BaseException重命名为BasicException,彻底解决与Python内置BaseException的命名冲突
  • 所有自定义业务异常(CancelActionDataUpdate)现在统一继承自BasicException
  • 升级指南:全局替换from nonebot_plugin_value.hook.exception import BaseExceptionfrom nonebot_plugin_value.hook.exception import BasicException

2. 数据库会话管理重构

  • 完全移除Repository层内部的async with session上下文管理
  • 改为由Service层统一管理会话生命周期,原生支持外部传入会话和事务嵌套
  • 所有公共API现在都接受可选的session参数,便于在同一个事务中执行多个原子操作

3. API返回值标准化

  • 移除所有无意义的冗余-> None返回值声明
  • batch_add_balancebatch_del_balance现在统一返回list[ActionResult]严格保证与输入顺序一一对应
  • 所有失败操作都会返回包含详细错误信息的ActionResult对象

✨ 核心改进

1. 批量操作性能飞跃

  • 使用asyncio.gather并行执行批量余额操作,100个账户的批量操作性能提升10倍以上
  • 正确处理所有异常情况,单个操作失败不会影响其他操作
  • 新增return_all_on_fail参数,控制失败时是否返回所有操作的结果

2. 事务一致性全面修复

  • 统一将事务边界上移至Service层和API层,仓储层完全不处理commit/rollback
  • 所有写操作后都会显式执行session.commit(),彻底解决数据不持久化的问题
  • 支持外部事务的自动提交和回滚,保证跨API操作的原子性

3. 代码质量与可维护性提升

  • 统一使用model_validate(from_attributes=True)进行ORM到DTO的转换
  • 移除了所有手动字段映射,减少了90%的样板代码
  • 修复了所有类型错误,通过了严格的pyright静态检查
  • 统一了代码风格和文档字符串格式,提升了代码可读性

4. 钩子系统全面优化

  • 使用asyncio.gather并发执行多个钩子,大幅提升响应速度
  • 完善了异常传播逻辑,CancelActionDataUpdate可以正常终止交易流程
  • 增加了钩子名称的枚举值校验,防止注册无效钩子

🧪 测试与CI/CD

1. 全面的测试覆盖

  • 重构并扩展了完整的测试体系,新增10+个测试文件
  • 覆盖了所有核心API:账户、货币、交易、钩子、数据导出导入、依赖注入
  • 测试用例从原来的5个增加到50+个,覆盖了所有边界条件和异常场景

2. 代码覆盖率统计

  • 集成pytest-cov代码覆盖率工具
  • 配置了完整的覆盖率报告,支持终端、XML和HTML格式输出
  • 新增run_test.sh脚本,一键重置数据库并运行完整测试套件

3. CI/CD流程优化

  • PR流程现在会自动运行所有测试并生成覆盖率报告和JUnit测试报告
  • 主CI流程简化为仅执行代码检查和构建,提升合并速度
  • 更新了.gitignore,添加了测试结果和覆盖率文件

📝 其他改进

  • 更新README,添加项目定位:"为 NoneBot2 设计的娱乐系统基础设施。"
  • 统一了所有文档字符串的术语和格式
  • 升级了所有依赖到最新稳定版本
  • 修复了缓存不一致的问题,统一使用expire_cache替代update_cache
  • 修复了asyncio.gather异常处理的经典bug,现在正确捕获所有BaseException子类

🚀 升级建议

本次发布包含大量破坏性变更和重要修复,强烈建议所有用户立即升级

  • 本次发布没有数据库结构变更,不需要运行数据库迁移命令
  • 请按照上述破坏性变更说明修改您的代码
  • 升级后建议运行完整的测试套件确保所有功能正常工作

📊 版本统计

  • 变更文件:28个
  • 新增代码:约2000行
  • 删除代码:约1500行
  • 测试覆盖率:>85%

🤝 贡献者

感谢 @JohnRichard4096 完成了本次1.0版本的全部重构工作!

🔗 相关链接


如果您在使用过程中遇到任何问题,请提交Issue,我们会尽快处理。

Full Changelog: 0.1.7...1.0.0

V0.1.7

24 Oct 15:22
d67519e

Choose a tag to compare

主要特性

1. 新增 LRU 缓存系统

  • 添加了 _cache.py 模块实现应用层缓存
  • 支持三种缓存类型:货币、账户、交易记录
  • 使用 LRU(最近最少使用)淘汰策略管理缓存

2. 缓存配置

  • 新增配置项 VALUE_PRE_BUILD_CACHE 控制是否在启动时预构建缓存
  • 添加 config.py 配置文件

3. API 优化

  • 账户 API (api_balance.py):

    • 修改多个函数的返回值,从返回完整数据改为 None
    • 添加缓存更新逻辑
    • 支持缓存命中查询
  • 货币 API (api_currency.py):

    • get_currencylist_currencies 添加缓存支持
    • 优化缓存更新机制

4. 执行器重构

  • 移除了 AccountExecutor 中的本地数据映射
  • 改为使用全局缓存系统

5. 模型和上下文优化

  • 将钩子上下文从 Pydantic 模型改为 dataclass
  • 修复代码风格问题

6. 版本更新

  • 0.1.6 升级到 0.1.7

技术细节

缓存设计

class CacheCategoryEnum(str, enum.Enum):
    CURRENCY = "currency"
    ACCOUNT = "account" 
    TRANSACTION = "transaction"

缓存管理

  • 使用 CacheManager 单例管理所有缓存
  • 支持按类别设置不同缓存大小
  • 提供缓存失效机制

性能改进

  • 减少数据库查询次数
  • 通过预构建缓存提升启动后首次请求速度
  • 智能缓存更新和失效

这个更新显著提升了插件的性能,特别是在高频访问场景下,通过减少数据库查询来提供更快的响应速度。

What's Changed

Full Changelog: 0.1.6...0.1.7

V0.1.6.post1

04 Aug 10:52
e7589b4

Choose a tag to compare

What's Changed

Full Changelog: 0.1.6...0.1.6.post1

V0.1.6

04 Aug 04:23
b5fd8d0

Choose a tag to compare

What's Changed

Full Changelog: 0.1.5...0.1.6

V0.1.5

03 Aug 09:40
f76de47

Choose a tag to compare

What's Changed

Full Changelog: 0.1.4...0.1.5

V0.1.4.post1

02 Aug 15:19
657fbad

Choose a tag to compare

What's Changed

Full Changelog: 0.1.4...0.1.4.post1

V0.1.4

02 Aug 14:56
3848fd4

Choose a tag to compare

What's Changed

Full Changelog: 0.1.3...0.1.4

V0.1.3.post2

01 Aug 02:45
bc92931

Choose a tag to compare

What's Changed

Full Changelog: 0.1.3.post1...0.1.3.post2

V0.1.3.post1

31 Jul 11:46
5672ef3

Choose a tag to compare

What's Changed

Full Changelog: 0.1.3...0.1.3.post1

V0.1.3

31 Jul 08:28
3b46389

Choose a tag to compare

What's Changed

Full Changelog: 0.1.2...0.1.3