2026-05-21 — /api/blast/databases/versions 구현¶
Motivation¶
SPA "DB Versions" 탭(web/src/pages/tools/tabs/DbVersionsTab.tsx)이
dbVersionApi.list() 로 /api/blast/databases/versions 를 호출하고 있었지만,
백엔드 라우트는 stub 이라 항상 {"versions": {}, "degraded": true} 만
반환해서 표가 영구적으로 비어 있었다. 다운로드한 BLAST DB 목록/버전을
확인할 방법이 사실상 없는 상태였다.
User-facing change¶
- Tools → DB Versions 탭이 실제로 다운로드된 DB 행을 표시한다.
- 각 행은 DB 이름, type(
nucl/prot), source(ncbi/custom), source_version, downloaded_at(=created_at)을 보여준다. - 기존
/api/blast/databases(상세 페이로드)는 변경 없음 — DB Versions 탭은 더 가벼운 projection 을 받는다.
API diff¶
GET /api/blast/databases/versions?subscription_id=&storage_account=&resource_group=
- 이전:
{"versions": {}, "degraded": true, "degraded_reason": "blast_db_listing_not_yet_implemented"}(stub) - 신규:
{"versions": DbVersionMeta[], "total": int} DbVersionMeta:db_name,source,source_version,created_at,_last_modified, optionaldb_type,title,version_tag.- storage_account/resource_group 누락 시
{"versions": [], "total": 0}. - Storage data-plane 실패 시 기존
classify_storage_failure(...)와 같은degraded마커 첨부.
데이터 소스는 새 SDK 호출이 아니라 기존 list_databases()
(api/services/storage_data.py). .njs + {db}-metadata.json 에서 이미
파싱하던 필드를 SPA 가 기대하는 DbVersionMeta 모양으로 reshape 만 한다.
Validation¶
uv run pytest -q api/tests/test_blast_databases_versions.py— 3 passed (missing-params empty, happy path projection + sort + optional-field omission, storage failure -> degraded).uv run pytest -q api/tests/test_blast_databases_warmup_plan.py api/tests/test_blast_databases_versions.py api/tests/test_route_contracts.py— 13 passed.uv run ruff check api/routes/blast/databases.py api/tests/test_blast_databases_versions.py— All checks passed.
Files¶
api/routes/blast/databases.py—blast_databases_versionsstub -> real projection overlist_databases().api/tests/test_blast_databases_versions.py— new regression suite.