Files
portfolio-hub/docs/batches/bat-001_20260502_trex-basic-v1-api-contract/planning.md
T
genichin ce63c75c9c feat(V1-API): implement TREX-Basic consumer API contract with encryption and persistence
- Add V1 API endpoints: assets, ledger, user-info
- Implement Fernet-based credential payload encryption (req-010)
- Extend health response schema with runtime info (req-004)
- Add service token runtime ID issuance (req-005)
- Implement database schema migration for V1 API (req-009)
- Add comprehensive test coverage for V1 endpoints
- Update SRS with 10 new requirements (REQ-004 through REQ-011)
- Create batch planning, design, and verification for BAT-001
- Integrate review-discovery StagePilot skill
- Update documentation indices and baseline specs
2026-05-02 09:06:15 +00:00

4.3 KiB

BAT-001 Planning

  • Status: confirmed
  • Batch: BAT-001
  • Profile: standard

Included REQ

  • REQ-004: GET /health 응답 스키마 확장
  • REQ-005: service-token 발급 시 runtime_id 동시 생성
  • REQ-006: GET /v1/assets 엔드포인트 구현
  • REQ-007: GET /v1/user_info 엔드포인트 구현
  • REQ-008: POST /v1/assets/{asset_id}/ledger/trades 구현
  • REQ-009: v1 API DB 스키마 migration 추가
  • REQ-010: credential_payload Fernet 암호화 및 startup validation

Delivery Plan

구현 선행 조건과 의존성 방향을 기준으로 아래 순서로 진행한다.

Out of Scope

  • REQ-001 (Testing — dcy-001 범위, 별도 batch 예정)
  • REQ-002 (Migration 정책 문서 — 기 반영됨)
  • REQ-003 (Documentation — dcy-001 runbook, 별도 처리)
  • REQ-011 (Documentation — 본 batch 구현 완료 후 별도 task)
  • broker_credentials 키 로테이션 절차
  • disabled_reason 동적 계산 (이번 반복은 고정값 "account_inactive")
  • GET /v1/assets 페이지네이션

1단계: 기반 레이어 (의존 없음)

  • REQ-010: app/core/encryption.py 신규 구현, app/core/config.py에 CREDENTIAL_ENCRYPTION_KEY startup validation 추가
  • REQ-009: Alembic migration 파일 작성 (portfolios.market, auth_tokens.runtime_id, broker_credentials, ledger_trades), app/domain/models.py 모델 필드/클래스 추가

2단계: 인증 확장 (REQ-009/010 완료 후)

  • REQ-005: app/cli/commands/service_tokens.py, app/api/auth_routes.py, app/services/auth_service.py에 runtime_id UUID v4 생성·저장 추가

3단계: v1 엔드포인트 (REQ-009/010/005 완료 후)

  • REQ-004: app/api/health.py 응답 스키마 확장 (service, version, checked_at 추가), HealthResponse 스키마 추가
  • REQ-006: app/api/v1_assets.py 신규, 서비스·스키마·레포지터리 메서드 추가, app/main.py /v1 라우터 등록
  • REQ-007: app/api/v1_user_info.py 신규, BrokerCredential 조회·복호화 서비스·스키마 추가
  • REQ-008: app/api/v1_ledger.py 신규, LedgerTrade 저장·중복 감지 서비스·스키마 추가

4단계: 테스트

  • 각 엔드포인트 단위 테스트 작성 및 기존 test_auth.py 확장

Dependencies

  • Internal:
    • REQ-009 migration이 REQ-005, 006, 007, 008 구현의 선행 조건 (컬럼·테이블 존재 필요)
    • REQ-010 암호화 유틸리티가 REQ-007 credential_payload 복호화의 선행 조건
    • REQ-005 runtime_id 발급이 REQ-007 GET /v1/user_info runtime_id 반환의 선행 조건
    • app/main.py /v1 라우터 등록은 REQ-006/007/008 세 라우터를 한 번에 처리
  • External:
    • CREDENTIAL_ENCRYPTION_KEY 환경변수 (운영 환경 설정 필요)
    • Docker Compose local-test 환경에서 Alembic upgrade head 선행 필요

Design Gate

  • Design Required Before Implementation: yes
  • Reason:
    • /v1 라우터 구조 및 app/main.py 등록 방식 결정 필요 (prefix, router 분리 또는 통합)
    • GET /v1/user_info의 R-4 처리 방식 결정 필요 (runtime_id 없는 구형 service-token: 404 또는 즉시 생성)
    • disabled_reason 고정값 방식 확정 필요 ("account_inactive" 등)
    • Fernet startup validation 위치 확정 필요 (FastAPI lifespan vs Settings 초기화)
    • broker_credentials 테이블 상세 컬럼 타입 확정 필요 (NUMERIC vs FLOAT, TIMESTAMPTZ 등)
    • runtime_id 포맷 확정 필요 (UUID v4 권장, 설계 단계 확정)

Milestones

  1. design.md confirmed — 모든 Design Gate 결정 사항 해소
  2. REQ-009 migration 구현 완료 및 로컬 DB upgrade head 성공
  3. REQ-010 Fernet 유틸리티 구현 완료 및 startup validation 동작 확인
  4. REQ-005 runtime_id 발급 구현 완료 및 단위 테스트 통과
  5. REQ-004/006/007/008 엔드포인트 구현 완료
  6. 전체 테스트 스위트 통과
  7. verification.md confirmed

Risks

  • R1: GET /v1/user_info R-4 처리(기존 runtime_id 없는 토큰) 미결 — 설계 단계에서 반드시 확정. 404 선택 시 기존 service-token 무효화 영향 범위 검토 필요.
  • R2: Fernet 키 없는 환경에서 테스트 실행 실패 가능 — 테스트 픽스처에서 환경변수 mock 처리 필요.
  • R3: broker_credentials 컬럼 타입(특히 numeric 정밀도)을 migration 작성 전 확정하지 않으면 후속 변경 migration이 늘어남.
  • R4: /v1 라우터 prefix 방식이 기존 /portfolios, /auth 등 라우터와 충돌하지 않는지 app/main.py 구조 확인 필요.