3.1 KiB
3.1 KiB
BAT-014 Planning
- Status: draft
- Batch: BAT-014
- Profile: batch-lite
Included REQ
- REQ-025: POST /v1/portfolios 응답에
PortfolioItem.symbol포함 - REQ-026: PATCH /v1/portfolios/{portfolio_id} 응답에
PortfolioItem.symbol포함 - REQ-027: DELETE /v1/portfolios/{portfolio_id} (HTTP 200 응답) 에
PortfolioItem.symbol포함 - REQ-028: GET /v1/portfolios 응답이
portfolios JOIN assets결과를 기반으로symbol을 직접 반환 - REQ-032: baseline 문서에 위 계약 반영
Delivery Plan
app/schemas/v1.py의PortfolioItem에symbol: str | None = None추가app/api/v1_portfolios.py의_portfolio_to_item()에symbol=portfolio.symbol추가app/repositories/postgres.py의_SELECT_PORTFOLIO/_row_to_portfolio/get()/list_portfolios()흐름을 재확인해 GET/v1/portfolios가 asset join 결과를 응답까지 유지하는지 검증tests/test_v1_portfolios_list.py에서 GET 응답 item의symbol존재 및 기대값(005930) 검증 추가tests/test_v1_portfolios_crud.py에서 POST/PATCH/DELETE 응답의symbol존재 및 기대값 검증 추가docs/interface-contract.md에 POST/PATCH/DELETE/GET/v1/portfolios응답 설명의symbol반영 및 GET의 asset join 기반 응답 설명 추가- 회귀 테스트 실행 및 결과를 후속 verification 단계에 기록
Dependencies
- Internal:
- BAT-009 (v1 portfolio CRUD core) — 기존 구현과 테스트 기반
- BAT-010 (portfolio v1 baseline docs) — interface-contract baseline 업데이트 trace
- External:
- 없음
Design Gate
- Design Required Before Implementation: no
- Reason:
- 변경은 기존 CRUD/list 응답 contract에 additive field 하나를 추가하고 문서/테스트를 보강하는 수준이다.
app/repositories/postgres.py는 이미_SELECT_PORTFOLIO에서JOIN assets a ON p.asset_id = a.asset_id및a.symbol선택을 수행하고 있어, 새 쿼리 전략이나 구조 재설계가 필요하지 않다.- 사용자가 명시한 핵심 제약(
GET /v1/portfolios는 asset join 결과를 응답해야 함)도 현재 repository shape와 정합한다. 따라서 design 산출물 없이 구현/검증으로 바로 진행 가능하다.
Milestones
- Schema/API serialization 반영
- CRUD/list 테스트 보강
- baseline 문서 갱신
- 회귀 테스트 실행
- verification 근거 정리 후 REQ 재Implemented 검토
Risks
- R1 (Low): 테스트 fixture가 in-memory fake repo를 사용하므로 repository-level join 보장을 직접 증명하지 못할 수 있음.
- 대응: GET contract 문서와 repository 코드 확인 결과를 verification에 함께 기록하고, 필요 시 repo integration test 추가를 검토.
- R2 (Low):
PortfolioItem에symbol추가 시 기존 스냅샷/응답 dict equality 테스트가 깨질 수 있음.- 대응: 테스트 expectation을 additive field 기준으로 갱신.
- R3 (Low): baseline 문서가 POST/PATCH/DELETE/GET 중 일부 응답만 갱신되어 source of truth 불일치가 남을 수 있음.
- 대응:
docs/interface-contract.md네 경로를 한 턴에 모두 갱신.
- 대응: