dcy-003/004 기반 v1 API surface 완성 및 BAT-008~011 구현·검증 완료:
- BAT-008 (REQ-019~021,024): 토큰 surface baseline 문서 갱신
- BAT-009 (REQ-025~028): POST/PATCH/DELETE/GET /v1/portfolios CRUD 신설
- _require_write_token, _get_portfolio_or_404, soft delete, daemon-scoped list
- BAT-010 (REQ-030~032): portfolio tag/comment 서브 라우트 신설 + baseline 갱신
- GET/POST/DELETE /v1/portfolios/{id}/tags
- POST/GET/PATCH/DELETE /v1/portfolios/{id}/comments
- BAT-011 (REQ-029): ledger path migration
- POST /v1/assets/{asset_id}/ledger/trades → /v1/portfolios/{portfolio_id}/ledger/trades
- v1_ledger.py 제거, disabled 차단(409) 추가
- test_v1.py / test_daemon_assignment.py 구 path 갱신
- 신규 tests: test_v1_portfolios_crud.py, test_v1_portfolios_list.py,
test_v1_portfolios_tags_comments.py, test_v1_portfolios_ledger.py
- 전체 suite: 340 passed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.4 KiB
2.4 KiB
BAT-010: v1 portfolio sub-resources (tags/comments + baseline docs)
- Status: release-candidate
- Profile: standard
- Source Discovery: dcy-003
- Included REQ: REQ-030, REQ-031, REQ-032
- Excluded REQ: REQ-029(ledger path migration — trex-basic 동시 배포 제약으로 별도 batch)
Summary
- v1 portfolio 서브 리소스 라우트를 완성한다:
/v1/portfolios/{id}/tags(GET 신설 + disabled 보호, REQ-030),/v1/portfolios/{id}/comments(CRUD 4종 신설, REQ-031). - REQ-025~031 완료 후 baseline 문서(
interface-contract.md,runtime-flows.md,data-model.md,project-structure.md) 정합성을 일괄 회복한다(REQ-032).
Scope
- In Scope:
app/api/v1_portfolios.py—GET /v1/portfolios/{id}/tags신설, existing POST/DELETE tag routes disabled 보호 보강, comment CRUD 4종 서브라우트 신설app/schemas/v1.py—PortfolioTagListResponse,PortfolioCommentRequest,PortfolioCommentUpdateRequest,PortfolioCommentItem,PortfolioCommentListResponse신규 (또는 기존 schema 재사용 확정)docs/interface-contract.md,docs/runtime-flows.md,docs/data-model.md,docs/project-structure.md— v1 portfolio surface + soft delete 정책 baseline 반영tests/test_v1_portfolios_tags_comments.py(신규) — REQ-030/031 AC 검증
- Out of Scope:
POST /v1/portfolios/{id}/ledger/tradespath 이전 (→ REQ-029, 별도 batch)- interface-contract.md 구 path
/v1/assets/{id}/ledger/trades제거 명세 (→ REQ-029 범위, 본 batch에서는 pending 마킹만)
Documents
- Planning: planning.md
- Design: design.md
- Implementation: implementation.md
- Verification: verification.md
Notes
- R-1 (Low): REQ-030의 POST/DELETE
/v1/portfolios/{id}/tags라우트는 BAT-004(REQ-005) 구현 시app/api/v1_portfolios.py에 이미 존재. disabled portfolio 보호(AC-8) 누락 여부를 design 단계에서 감사 후 보강. - R-2 (Low): REQ-031 comment 작성자 ownership 정책 — dcy-003 본문은 portfolio ownership을 기준으로 명시. comment 작성자 ownership(본인 comment만 수정/삭제 가능) 적용 여부는 design 단계에서 확정.
- R-3 (Low): REQ-032 interface-contract.md의 ledger path 관련 갱신은 REQ-029 미완료로 해당 섹션을 "pending REQ-029" 마킹 후 defer.
- 선행 완료: BAT-009(REQ-025~028 Implemented) — v1 portfolio CRUD 기반 인가/ownership 패턴 확립.