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.5 KiB
2.5 KiB
BAT-010 Implementation
- Status: done
- Batch: BAT-010
Plan Summary
- REQ-030:
apply_portfolio_tag+remove_portfolio_tag에_require_write_token+ disabled 409 체크 추가;get_portfolio_tags신설.PortfolioTagListResponse스키마 추가. - REQ-031: comment CRUD 4종 라우트 신설 (
create_portfolio_comment,list_portfolio_comments,update_portfolio_comment,delete_portfolio_comment). v1 comment schema 5종 추가. - REQ-032: baseline 4종 문서 갱신.
Changed Files
app/schemas/v1.py— 5개 schema 추가:PortfolioTagListResponse,PortfolioCommentItem,PortfolioCommentRequest,PortfolioCommentUpdateRequest,PortfolioCommentListResponseapp/api/v1_portfolios.py— import 추가(PortfolioComment, 5 schemas,TagItem);_comment_to_itemhelper 추가;apply_portfolio_tag/remove_portfolio_tag에_require_write_token+ disabled 409 보강;get_portfolio_tags신설;create_portfolio_comment,list_portfolio_comments,update_portfolio_comment,delete_portfolio_comment4종 신설tests/test_v1_portfolios_tags_comments.py— 신규 (32 tests; REQ-030 AC-111 + REQ-031 AC-111 커버)docs/interface-contract.md— v1 Portfolio API 섹션 신규 추가; tag/comment 서브 라우트 명세 추가; ledger path "pending REQ-029" 마킹docs/runtime-flows.md— portfolio mutation flow, GET /v1/portfolios 분기 flow, soft delete flow, GET tags flow, comment CRUD flow 추가docs/data-model.md— Portfolio.status='disabled' 의미 + 의존 데이터 보존 정책 추가docs/project-structure.md— v1_portfolios.py 책임 갱신 + v1.py schema 목록 갱신
Execution Log
app/schemas/v1.py— 5 schema 추가 (PortfolioTagListResponse 외)app/api/v1_portfolios.py— import 갱신,_comment_to_item추가, 기존 tag 라우트 보강, 신규 7개 라우트 추가tests/test_v1_portfolios_tags_comments.py— 32 test 신규 작성.venv/bin/python -m pytest tests/test_v1_portfolios_tags_comments.py→ 32/32 PASSED.venv/bin/python -m pytest(전체) → 330/330 PASSED (회귀 없음)docs/4종 갱신 (interface-contract, runtime-flows, data-model, project-structure)
Validation
tests/test_v1_portfolios_tags_comments.py: 32 tests PASSED- Full suite: 330 tests PASSED, 2 warnings (deprecation, 무관)
Remaining Risks
- R-3 (Low):
portfolio_comments테이블의 실 DB 존재 여부는 통합 테스트(실 DB)에서만 확인 가능. 단위 테스트는 MagicMock으로 커버됨.