- 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
4.3 KiB
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
- design.md confirmed — 모든 Design Gate 결정 사항 해소
- REQ-009 migration 구현 완료 및 로컬 DB upgrade head 성공
- REQ-010 Fernet 유틸리티 구현 완료 및 startup validation 동작 확인
- REQ-005 runtime_id 발급 구현 완료 및 단위 테스트 통과
- REQ-004/006/007/008 엔드포인트 구현 완료
- 전체 테스트 스위트 통과
- 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 구조 확인 필요.