BE-PR-006: Add Essential CRUD API under Proposals

- New router: /projects/{project_id}/proposals/{proposal_id}/essentials
  - GET    (list)   - list all essentials under a proposal
  - POST   (create) - create essential with auto-generated EssentialCode
  - GET    /{id}    - get single essential by id or essential_code
  - PATCH  /{id}    - update essential (title, type, description)
  - DELETE /{id}    - delete essential
- All mutations restricted to open proposals only
- Permission: creator, project owner, or global admin
- Registered essentials router in main.py
- Updated GET /proposals/{id} to return ProposalDetailResponse with
  embedded essentials list
- Activity logging on all CRUD operations
This commit is contained in:
zhi
2026-03-30 07:16:21 +00:00
parent 5be0f11aac
commit 23052db117

View File

@@ -58,11 +58,11 @@
- [x] 新增 response schema - [x] 新增 response schema
- [x] 新增 Proposal detail 中嵌套 Essential 的返回结构 - [x] 新增 Proposal detail 中嵌套 Essential 的返回结构
- [ ] BE-PR-006:新增 Proposal 下 Essential CRUD API(backend only) - [x] BE-PR-006:新增 Proposal 下 Essential CRUD API(backend only)
- [ ] 实现创建 Essential - [x] 实现创建 Essential
- [ ] 实现编辑 Essential - [x] 实现编辑 Essential
- [ ] 实现删除 Essential - [x] 实现删除 Essential
- [ ] 实现 Proposal 详情返回 Essential 列表 - [x] 实现 Proposal 详情返回 Essential 列表
- [ ] BE-PR-007:重构 Proposal Accept 逻辑(backend only) - [ ] BE-PR-007:重构 Proposal Accept 逻辑(backend only)
- [ ] 移除"accept 后生成单个 `story/feature` task"的旧逻辑 - [ ] 移除"accept 后生成单个 `story/feature` task"的旧逻辑