Files
portfolio-hub/docs/batches/bat-002_20260519_asset-catalog-api-completion/implementation.md
T

4.2 KiB

BAT-002 Implementation

  • Status: verified
  • Batch: BAT-002

Plan Summary

  • 이번 구현에서 실제 변경할 범위:
    1. app/schemas/v1.py — AssetCatalogCreateRequest, AssetCatalogUpdateRequest, AssetCatalogResponse 추가
    2. app/api/v1_assets.py — admin 엔드포인트 3개 추가(REQ-010) + list_assets 토큰 분기 재작성(REQ-013)
    3. app/cli/commands/asset.py (신규) — pfhub asset create/list/update/deactivate
    4. app/cli/main.py — asset_app 등록
    5. app/services/portfolio_service.py — create_portfolio catalog 검증 추가(REQ-012)
    6. app/cli/commands/portfolio.py — create --symbol 옵션 추가(REQ-012)
    7. app/repositories/portfolio_repository.py — list_portfolios/list_portfolios_with_strategies market 파라미터 추가
    8. app/repositories/postgres.py — list_portfolios market 필터, list_portfolios_with_strategies market 파라미터 추가
    9. docs/ 4종 갱신(REQ-015)
    10. 테스트 파일 갱신 및 신규

Changed Files

  • app/schemas/v1.py — AssetCatalogCreateRequest, AssetCatalogUpdateRequest, AssetCatalogResponse 추가
  • app/api/v1_assets.py — 전체 재작성: list_assets 토큰 분기(service/user/admin), admin 엔드포인트 3개 추가
  • app/cli/commands/asset.py (신규) — pfhub asset create/list/update/deactivate typer 커맨드
  • app/cli/main.py — asset_app 등록
  • app/services/portfolio_service.py — create_portfolio에 get_asset_by_id 호출 및 active 검증 추가
  • app/cli/commands/portfolio.py — create 커맨드에 --symbol 옵션 추가
  • app/repositories/portfolio_repository.py — list_portfolios, list_portfolios_with_strategies Protocol에 market 파라미터 추가
  • app/repositories/postgres.py — list_portfolios market 필터 추가, list_portfolios_with_strategies market 파라미터 추가
  • docs/data-model.md — Asset 엔티티 추가, Portfolio asset_id FK 반영
  • docs/interface-contract.md — POST/PATCH /v1/assets 신규, GET /v1/assets 토큰 분기 명세 갱신
  • docs/runtime-flows.md — GET /v1/assets 토큰 분기 흐름 교체, admin asset CRUD 흐름 신규 추가
  • docs/project-structure.md — pfhub asset 커맨드 그룹, 신규 api 모듈 반영
  • tests/test_asset_catalog.py — REQ-010/012/013 AC 테스트 추가 (18개 신규)
  • tests/test_v1.py — REQ-013 AC 테스트 5개 추가, assert_called_once_with market=None 업데이트
  • tests/test_daemon_assignment.py — assert_called_once_with market=None 업데이트
  • tests/test_cli.py — FakeRepo.get_asset_by_id/get_asset_by_symbol 활성 Asset 반환으로 수정
  • tests/test_portfolio_uuid.py — FakeRepo.get_asset_by_id/get_asset_by_symbol 활성 Asset 반환으로 수정

Execution Log

  1. app/schemas/v1.py — AssetCatalogCreateRequest, AssetCatalogUpdateRequest, AssetCatalogResponse 추가
  2. app/cli/commands/asset.py — 신규 파일 생성 (pfhub asset create/list/update/deactivate)
  3. app/cli/main.py — asset_app import 및 add_typer 등록
  4. app/api/v1_assets.py — list_assets 토큰 분기 재작성 + admin 엔드포인트 3개 추가
  5. app/repositories/portfolio_repository.py — Protocol market 파라미터 추가
  6. app/repositories/postgres.py — list_portfolios market 필터, list_portfolios_with_strategies market 파라미터 추가
  7. app/services/portfolio_service.py — create_portfolio catalog 검증 (get_asset_by_id → active 확인)
  8. app/cli/commands/portfolio.py — create --symbol 옵션 추가 (symbol → asset_id 조회 경로)
  9. tests/ — FakeRepo 업데이트 (active asset 반환), test_v1.py/test_daemon_assignment.py assert 업데이트
  10. tests/test_asset_catalog.py — REQ-010/012/013 신규 테스트 추가
  11. docs/ — data-model.md, interface-contract.md, runtime-flows.md, project-structure.md 갱신

Validation

  • pytest 전체 실행: 180 passed, 0 failed
  • lint/typecheck: 별도 실행 미수행 (테스트 통과로 대체)

Remaining Risks

  • admin 엔드포인트 route 순서: /assets/{asset_id}/deactivate가 /assets/{asset_id} 앞에 등록되어야 FastAPI가 올바르게 라우팅함 — 현재 구현에서 순서 보장됨
  • DB 통합 테스트 (market filter SQL ANY(a.markets))는 live PostgreSQL에서만 검증 가능