REQ-044: list_catalog_assets 의존성을 require_admin → require_read로 완화. asset 쓰기(POST/PATCH/DELETE)는 require_admin 유지. REQ-045: GET /v1/daemons 신규 엔드포인트 — caller 소유 데몬만 반환(require_read). user_id=None(env 토큰)은 빈 목록 200. DaemonResponse/DaemonListResponse 스키마 추가. 기존 테스트(test_v1.py, test_asset_catalog.py, test_daemon_assignment.py, test_tags_master.py) REQ-044 권한 완화에 맞게 업데이트. test_v1_daemons.py 신규 추가(13 케이스). pytest 472 passed, 0 failed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
2.5 KiB
2.5 KiB
BAT-019 Planning
- Status: confirmed
- Batch: BAT-019
- Profile: standard
Included REQ
- REQ-044: GET /v1/assets 권한 완화 (require_admin → require_read)
- REQ-045: 사용자 가용 데몬 목록 엔드포인트 신규 (GET /v1/daemons)
Delivery Plan
REQ-044 순서
app/api/v1_assets.py의list_catalog_assets의존성을require_read로 교체.- 나머지 쓰기 엔드포인트(POST/PATCH/DELETE)는
require_admin유지. - 기존 test_asset_catalog.py의
test_get_v1_assets_user_token_returns_403,test_get_v1_assets_service_token_returns_403등 403 기대 테스트를 200/403 신규 기대치로 업데이트.
REQ-045 순서
app/schemas/v1.py에DaemonResponse,DaemonListResponse스키마 추가.app/api/v1_daemons.py신규 생성: GET /v1/daemons 라우터.app/main.py에 v1_daemons 라우터 include_router 등록.tests/test_v1_daemons.py신규 생성: AC 전체 커버.
구현 순서
REQ-044(단순 1줄 변경) → REQ-045(스키마 → 라우터 → 등록 → 테스트) → 테스트 전체 실행
Dependencies
- Internal:
app/core/auth.py:require_read의존성 (이미 존재)app/domain/models.py:Daemon도메인 모델 (이미 존재, line 66)app/services/auth_service.py:find_candidate_daemons_for_user(이미 존재, line 161)app/repositories/portfolio_repository.py:list_daemons_for_user(이미 프로토콜 선언됨, line 103)
- External:
- 없음
Design Gate
- Design Required Before Implementation: yes
- Reason: REQ-045 신규 엔드포인트이므로 경로 컨벤션, 응답 래퍼 스키마, env/service 토큰(user_id=None) 처리, active 필터 여부를 design에서 확정해야 안전하게 구현할 수 있다. REQ-044는 단순 교체지만 같은 batch이므로 design에 함께 기록한다.
Milestones
- BAT-019 batch 폴더 및 문서 생성 완료
- Planning 확정
- Design 확정 (경로·스키마·env토큰 처리)
- REQ-044 구현 + 테스트 조정
- REQ-045 구현 + 신규 테스트
- pytest 전체 통과
- Verification 완료
Risks
- REQ-044: 기존 테스트 중
require_admin기대 403 케이스가 다수 있어 신규 200 기대로 업데이트 필요. 누락 시 기존 테스트 깨짐. - REQ-045:
user_id=None(env/service 토큰) 처리를 design에서 명확히 결정해야 구현이 일관됨. - REQ-045:
AuthService.find_candidate_daemons_for_user가list_daemons_for_user를 호출하는데, InMemoryRepository 미구현 시 서비스 레이어를 직접 mock해야 함.