Files
portfolio-hub/docs/batches/bat-020_20260628_daemon-scoped-broker-credential/implementation.md
T

31 lines
2.2 KiB
Markdown

# BAT-020 Implementation
## 변경 파일 요약
| 파일 | 변경 | REQ |
| --- | --- | --- |
| `app/domain/models.py` | BrokerCredential.daemon_id: str | None = None 추가 | REQ-046 |
| `app/repositories/postgres.py` | _row_to_broker_credential 7컬럼 지원, upsert/list/delete daemon_id 파라미터, update_broker_credential_daemon_id 메서드 신규 | REQ-046, REQ-048 |
| `app/schemas/v1.py` | UserInfoResponse: brokers list 제거, broker: BrokerItem | None = None 추가 | REQ-049 |
| `app/api/v1_user_info.py` | daemon_id=None → 403, daemon_id 기반 단일 broker 조회, 로그 개선(app_secret 미노출) | REQ-049, REQ-051 |
| `app/cli/commands/credential.py` | set/list/remove --daemon-id 옵션, backfill-daemon-id subcommand | REQ-048, REQ-050 |
| `migrations/versions/20260628_0026_*.py` | broker_credentials daemon_id TEXT NULL 컬럼 추가 (Step1) | REQ-047 |
| `migrations/versions/20260628_0027_*.py` | broker_credentials PK 전환 (Step2, 사장님 결재 후 적용) | REQ-047 |
| `tests/test_bat020_broker_credential_domain.py` | REQ-046 AC-1~6 단위 테스트 신규 | REQ-046 |
| `tests/test_bat020_user_info_daemon_scoped.py` | REQ-049/051 AC 전체 테스트 신규 | REQ-049, REQ-051 |
| `tests/test_bat020_credential_cli.py` | REQ-048/050 AC 전체 테스트 신규 | REQ-048, REQ-050 |
| `tests/test_v1.py` | brokers→broker 반영, daemon_id=None → 403 반영, 기존 테스트 갱신 | REQ-049 |
| `tests/test_cli.py` | FakeRepo 시그니처 갱신, credential 플로우 테스트 --daemon-id 포함 | REQ-050 |
| `tests/test_daemon_assignment.py` | daemon_id=None → 403 정책 갱신 | REQ-049 |
## Design 위임 확정 결과
### D-1: REQ-048 구현방식 → CLI subcommand 선택
- `pfhub credential backfill-daemon-id --user <username> --daemon-id <slug> [--dry-run] [--force] [--broker <broker>]`
- 근거: 운영자 제공 매핑 필요, --dry-run 자연스러운 구현, 기존 CLI 패턴과 일관성
### D-2: REQ-050 --daemon-id 입력 타입 + 과도기 정책
- daemon_slug 우선 (`get_daemon_by_slug(owner_user_id, slug)`) + UUID 폴백 (`get_daemon_by_id`)
- 과도기(Step1 완료, Step2 미완료): `--daemon-id` 미제공 시 경고 출력 + 허용
- Step2 PK 전환 후: DB NOT NULL 제약으로 자동 강제