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

2.2 KiB

BAT-020 Implementation

변경 파일 요약

파일 변경 REQ
app/domain/models.py BrokerCredential.daemon_id: str None = None 추가
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 추가
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 제약으로 자동 강제