feat: add software entitlement foundations
This commit is contained in:
@@ -2066,3 +2066,11 @@
|
||||
- 后台与文档:`CallRecordAdmin` 增加只读设备展示与筛选;同步 `api.md`、`routes.md`、`04-architecture.md`、`current-state.md` 和任务看板,明确本期只做关联观测,不实施订阅授权拦截。
|
||||
- 验证:本地已应用 billing 迁移;新增 4 条测试覆盖四个生成入口关联、无头兼容、伪造/跨账号会话拒绝、遥测脱敏和异步轮询。`py -3.12 manage.py test` 定向新增 4 条通过;随后 licensing 加关键标题/vision/同步图片/异步提交/遥测回归共 14 条通过;`manage.py check` 和 `makemigrations --check --dry-run` 通过。测试仅保留既有 allauth MySQL 条件唯一约束 `models.W036` 警告。
|
||||
- 下一步:领取 T-626,建立套餐、权益、席位和审计的基础模型与后台,不接入生成授权或购买流程。
|
||||
|
||||
## 2026-07-21 完成:T-626 软件套餐、权益与设备席位基础模型
|
||||
|
||||
- 实现:`apps.licensing` 新增 `SoftwarePlan`、`SoftwareEntitlement`、`LicenseSeat`、`LicenseEvent`,迁移为 `licensing.0002_softwareentitlement_licenseseat_licenseevent_and_more`。授予权益时复制套餐名称、价格、有效天数、设备数和宽限期,并预创建固定数量的席位;套餐后续编辑不会反向修改历史权益。
|
||||
- 服务与后台:新增事务服务 `grant_software_entitlement()`、`renew_software_entitlement()`、`revoke_software_entitlement()`、`assign_license_seat()`、`release_license_seat()`。每个人工操作均要求非空原因并写不可变授权事件;续期按 `max(now, expires_at)` 延长,席位分配锁权益和席位行。django-admin 支持套餐维护和权益专用授予/续期/撤销页,权益、席位、事件不允许直接编辑。
|
||||
- 边界:本任务不创建购买页、软件订单、支付回调、存量迁移请求/设备凭证,也不改变通用生成 API 或点数账本。
|
||||
- 验证:本地已应用 licensing 迁移。`py -3.12 manage.py test apps.licensing --keepdb --noinput --verbosity 2` 通过 14 条测试,包含套餐快照、续期、撤销、审计、后台权限和两个独立数据库连接并发抢占单席位;`manage.py check` 与 `makemigrations --check --dry-run` 通过。测试仅保留既有 allauth MySQL 条件唯一约束 `models.W036` 警告。
|
||||
- 下一步:领取 T-627,实施存量迁移权益、网页登录确认和产品专用设备凭证,继续保持通用生成 API 兼容。
|
||||
|
||||
Reference in New Issue
Block a user