Files
portfolio-hub/docs/batches/bat-010_20260521_v1-portfolios-sub-resources/implementation.md
T
genichinandClaude Sonnet 4.6 4bf6b554a7 feat: v1 portfolio mutation, sub-resources, ledger path migration (BAT-008~011)
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>
2026-05-21 07:25:39 +00:00

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, PortfolioCommentListResponse
  • app/api/v1_portfolios.py — import 추가(PortfolioComment, 5 schemas, TagItem); _comment_to_item helper 추가; 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_comment 4종 신설
  • 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

  1. app/schemas/v1.py — 5 schema 추가 (PortfolioTagListResponse 외)
  2. app/api/v1_portfolios.py — import 갱신, _comment_to_item 추가, 기존 tag 라우트 보강, 신규 7개 라우트 추가
  3. tests/test_v1_portfolios_tags_comments.py — 32 test 신규 작성
  4. .venv/bin/python -m pytest tests/test_v1_portfolios_tags_comments.py → 32/32 PASSED
  5. .venv/bin/python -m pytest (전체) → 330/330 PASSED (회귀 없음)
  6. 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으로 커버됨.