47 lines
3.8 KiB
Markdown
47 lines
3.8 KiB
Markdown
# 구현 진행 상황 — GitHub Issue #23 비정식 증적
|
|
|
|
> 이 문서는 ProofLine canonical artifact가 아니다. #23 구현 당시 GitHub 댓글을 출처와 함께 원문 보존한 비정식 증적이다.
|
|
> Source: https://github.com/fourblocks2020/portfolio-hub/issues/23#issuecomment-5275751156
|
|
> Author: `genichin`
|
|
> Created: `2026-08-13T03:53:46Z`
|
|
> Updated: `2026-08-13T04:06:33Z`
|
|
|
|
---
|
|
|
|
## 구현 진행 상황
|
|
|
|
- **대상:** #23 포트폴리오 목록 응답에 ledger 기반 투자금 집계 추가
|
|
- **브랜치:** `feat/23-ledger-investment-aggregates`
|
|
- **기준:** `origin/main` (`34792bdb5c38dc0b79ffa45391779e7667c51948`)
|
|
- **상태:** 구현·검증·독립 리뷰 완료 (커밋·푸시 전)
|
|
- **최종 업데이트:** 2026-08-13
|
|
|
|
### 구현 계획 및 작업 목록
|
|
|
|
- [x] #23의 확정 요구사항과 OQ-23-1 결정(A안: 유효 원장 기준)을 재확인한다.
|
|
- [x] 최신 `origin/main`에서 전용 구현 브랜치를 생성한다.
|
|
- [x] 기존 repository protocol, PostgreSQL adapter, in-memory/test doubles, 목록 route 조립 경계를 확인한다.
|
|
- [x] REVERSAL-aware 집계와 목록 응답에 대한 실패 테스트를 먼저 추가하고 RED를 확인한다.
|
|
- [x] `PortfolioItem`에 `net_contributed_capital`, `cumulative_profit_withdrawn` additive 필드를 추가한다.
|
|
- [x] 여러 portfolio ID를 한 번에 처리하는 grouped ledger aggregate repository 계약을 구현한다.
|
|
- [x] `REVERSAL.target_ledger_entry_id`가 참조하는 `INVEST`/`WITHDRAW`/`PROFIT` 원거래를 집계에서 제외한다.
|
|
- [x] 기존 단건 `returns/summary`를 같은 유효 원장 집계 의미로 정렬한다.
|
|
- [x] 가시성·`include_disabled`·`market` 필터가 적용된 반환 대상 ID만 집계해 목록 항목에 결합한다.
|
|
- [x] ledger가 없는 항목은 두 신규 값을 `0.0`으로 반환한다.
|
|
- [x] API/interface 문서에 순투자현금·누적 수익 인출액 의미와 REVERSAL 정책을 반영한다.
|
|
- [x] 집중 테스트를 통과시킨다.
|
|
- [x] 전체 테스트·lint/static check·diff hygiene를 통과시킨다.
|
|
- [x] 독립 코드 리뷰를 수행하고 발견 사항을 해소한다.
|
|
- [x] 최종 변경 파일·테스트 결과·잔여 위험을 이 댓글에 기록한다.
|
|
|
|
### 진행 기록
|
|
|
|
- 2026-08-13: 구현 브랜치 생성 및 #23 확정 결정 재확인.
|
|
- 2026-08-13: repository/API/test 경계 조사 완료. `uv run --isolated --extra dev pytest -q tests/test_portfolio_ledger_aggregates.py tests/test_v1_portfolios_list.py tests/test_v1_portfolios_manual_ledger.py` 실행 결과 **6 failed, 32 passed**로 신규 계약의 RED를 확인함.
|
|
- 2026-08-13: schema, repository protocol, PostgreSQL grouped aggregate, list route 결합, 단건 summary 공용화 구현. 동일 집중 명령 재실행 결과 **38 passed**.
|
|
- 2026-08-13: `docs/interface-contract.md`, `docs/runtime-flows.md`에 필드 의미·유효 원장·grouped aggregate·목록/단건 일관성 계약 반영.
|
|
- 2026-08-13: 저장소 내부 잔존 `.worktrees/`와 로컬 `.env`가 원본 작업트리 전체 테스트를 오염시켜, HEAD에서 clean detached worktree(`/tmp/portfolio-hub-23-verify`)를 만들고 #23 diff만 적용해 재검증. 전체 **598 passed, 6 skipped**, focused **38 passed**, compileall·`git diff --check`·Ruff fatal 규칙(E9/F63/F7/F82) 통과.
|
|
- 2026-08-13: 독립 read-only 코드 리뷰 **PASS**. Blocking/High/Medium finding 없음. 비차단 Low 후속 권고: (1) 실제 PostgreSQL integration fixture로 `ANY(%s)`·NUMERIC aggregate·REVERSAL 결과 검증, (2) 운영 규모에서 anti-join `EXPLAIN (ANALYZE, BUFFERS)` 관찰 및 필요 시 reversal partial index 검토.
|
|
|
|
> 각 작업이 실제로 완료되고 검증될 때마다 이 댓글의 체크박스와 진행 기록을 갱신한다. 체크 표시는 구현 완료 또는 해당 검증의 실제 통과를 의미하며, 배포·릴리스 완료를 의미하지 않는다.
|