Files
portfolio-hub/docs/batches/bat-010_20260521_v1-portfolios-sub-resources/index.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.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/trades path 이전 (→ REQ-029, 별도 batch)
    • interface-contract.md 구 path /v1/assets/{id}/ledger/trades 제거 명세 (→ REQ-029 범위, 본 batch에서는 pending 마킹만)

Documents

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 패턴 확립.