6.0 KiB
6.0 KiB
REQ-033: ledger_trades.asset_id → portfolio_id 컬럼명 정합화
- Status: Implemented
- Type: Migration
- Priority: Medium
- Owner: Justin Ko
Intent
ledger_trades테이블의asset_id컬럼이 실제로는 portfolio_id를 저장하지만 컬럼명이 의미와 불일치하여 schema reader가 assets 테이블 참조로 오해할 수 있다.- REQ-029 구현(POST /v1/portfolios/{id}/ledger/trades 이전) 시점의 잔여 명명 정합화를 마무리한다.
Requirement
- Alembic 신규 revision을 작성해
ledger_trades.asset_id컬럼을portfolio_id로 rename한다(ALTER TABLE ledger_trades RENAME COLUMN asset_id TO portfolio_id). - 기존 데이터는 동일 의미(portfolio_id 저장)이므로 backfill 불요.
app/repositories/postgres.py의 ledger_trades INSERT/SELECT/RETURNING SQL에서 컬럼명을portfolio_id로 갱신한다.app/domain/models.py의LedgerTradedataclass에asset_id필드가 있다면portfolio_id로 rename한다(있는 경우).app/api/v1_portfolios.pyledger route handler에서 응답에asset_id노출이 있다면portfolio_id로 정합화한다(있는 경우).- 마이그레이션 lock 시간을 운영 영향 < 1초로 유지하기 위해 짧은 단일
ALTER COLUMN RENAME트랜잭션으로 처리한다.
Acceptance Criteria
- Given 신규 Alembic revision 적용 후, When
\d ledger_trades실행, Thenportfolio_id컬럼이 존재하고asset_id컬럼은 존재하지 않는다. - Given AC-1 환경, When 기존
POST /v1/portfolios/{id}/ledger/trades호출, Then INSERT/SELECT 회귀 테스트가 모두 통과한다. - Given codebase grep
grep -rn "ledger_trades\..*asset_id\|asset_id.*ledger_trades" app/repositories/postgres.py app/domain/models.py app/api/v1_portfolios.py, When 본 REQ 구현 후, Then 결과는 0건이다. - Given 마이그레이션 staging dry-run, When
ALTER COLUMN RENAME실행 시간 측정, Then 측정 시간 < 1초 (NFR-1 정합). - Given 본 REQ 구현 후 전체 pytest 회귀, When 실행, Then 기존 통과 케이스 모두 유지 + ledger_trades 의존 케이스 통과.
Impacted Area
- Docs:
docs/data-model.md— ledger_trades 컬럼 명세에portfolio_id반영,asset_id표기 제거- (선택)
docs/interface-contract.md— ledger 응답에asset_id노출이 있다면portfolio_id로 갱신
- Modules:
migrations/versions/— 신규 revision (예:20260601_NNNN_ledger_trades_portfolio_id_rename.py)app/repositories/postgres.py— ledger_trades INSERT/SELECT/RETURNING 컬럼명 갱신(app/repositories/postgres.py:1284-1314)app/domain/models.py—LedgerTradedataclass 필드명 (있다면)app/api/v1_portfolios.py— ledger route handler 응답 매핑 (있다면)
- Tests:
- 갱신
tests/test_v1_portfolios_ledger.py— 컬럼명 변경 회귀 검증 - (선택) 신규 마이그레이션 dry-run 회귀
- 갱신
Notes
- 본 REQ는 dcy-005 FR-1 산출물. 정합화 묶음 trigger.
- 외부 client(trex-basic 등)는 HTTP API(
POST /v1/portfolios/{id}/ledger/trades)만 호출하므로 DB 컬럼명 의존 없음 추정. 마이그레이션 전 외부 query 의존성 확인. - 본 REQ는 별도 REL-002로 분리 배포(dcy-005 OQ-3 결정, 2026-06-01).
- Source: dcy-005 FR-1, REQ-029 Notes follow-up.
Change Log
CHG-20260601-03
- Date: 2026-06-01
- Author: Justin Ko
Change Summary
- Status: Approved → Implemented
Intent
- BAT-015 confirm-batch-verification 완료(2026-06-05). AC-2/3/5 PASSED, AC-1/4 staging Deferred(blocker 아님). 마이그레이션 + 코드/스키마/도메인/라우트/테스트/문서 정합화 모두 evidence 확보.
Acceptance Criteria Delta
- No change
Impacted Area Delta
- No change
Delivery Trace Delta
- Batches:
- BAT-015 (release-candidate)
- Releases:
- REL-002 (예정)
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: implemented
- Follow-up Action: REL-002 staging 시점에 AC-1 (
\d ledger_trades컬럼 검증) + AC-4 (마이그레이션 lock < 1초) evidence 수집. 본 워크스페이스 ledger_trades 테이블 미생성 상태 자체는 별도 후속 항목(BAT-011 mock verification 후속) 등록 후보.
CHG-20260601-02
- Date: 2026-06-01
- Author: Justin Ko
Change Summary
- Status: Proposed → Approved
Intent
- 승인 게이트 통과: 필수 필드(Status/Type/Priority/Owner/Intent/Requirement/AC/Impacted Area/Change Log) 모두 충족, AC-1~5 구체성 확인 완료, blocker 없음.
Acceptance Criteria Delta
- No change
Impacted Area Delta
- No change
Delivery Trace Delta
- Batches: none (미정)
- Releases: none (미정 — REL-002 분리 예정)
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: promote-to-approved
- Follow-up Action: batch 계획 편입 (BAT-015 후보)
CHG-20260601-01
- Date: 2026-06-01
- Author: Justin Ko
Change Summary
- 최초 생성 — dcy-005 confirm-discovery 후 draft-req 실행. dcy-005 FR-1 산출물.
Intent
- ledger_trades.asset_id 컬럼명을 의미에 맞게 portfolio_id로 정합화.
Acceptance Criteria Delta
- Added:
- AC-1~5 최초 작성
Impacted Area Delta
- Docs: docs/data-model.md, (선택) docs/interface-contract.md — 최초 지정
- Modules: migrations/versions/, app/repositories/postgres.py, app/domain/models.py, app/api/v1_portfolios.py — 최초 지정
- Tests: tests/test_v1_portfolios_ledger.py — 최초 지정
Delivery Trace Delta
- Batches: none (미정)
- Releases: none (미정 — REL-002 분리 예정)
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: keep-current
- Follow-up Action: confirm-req 후 batch 계획 편입; staging 환경에서 ALTER COLUMN RENAME dry-run으로 lock 시간 측정
Validation Plan
- pytest로 AC-1~5 검증 + staging dry-run AC-4 측정