refactor(project): 重构权限常量定义并移除需求进度聚合功能

- 将产品和项目查询权限码统一提取到常量类中
- 移除需求进度聚合计算的相关实现代码
- 更新权限验证注解使用新的常量定义
- 清理相关的单元测试代码
- 更新错误码注释说明
This commit is contained in:
2026-06-11 09:17:21 +08:00
parent 10b7ccdeb0
commit 79591e66be
30 changed files with 1598 additions and 41 deletions

View File

@@ -84,6 +84,15 @@
判定口诀:**URL 里有 `{projectId}` / `{productId}` 等对象 ID → 对象域;没有 → 全域**。
### 站内信通知事件project 域统一入口)
业务动作要发站内信时,统一走 `framework/notify``NotifySendEvent``publishEvent(NotifySendEvent.of(userIds, templateCode, params))`),由全局唯一的 `NotifySendEventListener``@TransactionalEventListener(AFTER_COMMIT)`)做去重 / 兜底 / 调 `NotifyMessageSendApi`;不要绕过事件直接在业务 Service 里注入发送 API。
红线:
- **`NotifySendEvent` 只能在 `@Transactional` 的业务方法里 publish**。`@TransactionalEventListener` 的语义是"只在有事务的上下文里 publish 才会被消费"——在无事务方法里 publish通知会**静默不发、不报错**。新业务接入通知前先确认触发点方法有事务;确实无事务的场景不要"顺手 publish",要么补事务,要么找用户确认方案。
- 模板场景码登记进 `NotifyTemplateCodeConstants`,并保证 `system_notify_template` 已配同 code 模板(模板缺失时监听器只 `log.warn`,该场景通知发不出但不影响业务)。
## 接口语义(HTTP 动词)
本仓库 update 类接口默认按 RESTful 标准用 HTTP 动词区分语义,前后端必须按下表对齐,避免"前端没传字段"和"前端想清空"在后端无法区分的歧义。