Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
6.6 KiB
6.6 KiB
REQ-046: BrokerCredential 도메인 모델 daemon_id 필드 추가
- Status: Implemented
- Type: Data
- Priority: High
- Owner: Justin Ko
Intent
BrokerCredential도메인 엔티티가 현재user_id기반으로만 인증정보를 식별한다. daemon-scoped 소유로 전환하기 위해daemon_id필드를 모델에 추가하고, repository 조회/행 변환 로직이 daemon_id 차원을 인식하도록 한다.- 이 REQ는 도메인 모델·repository 계층의 데이터 구조 변경을 담당하며, 마이그레이션(REQ-047/REQ-048) 및 API 전달(REQ-049)·CLI(REQ-050)의 선행 조건이다.
Requirement
app/domain/models.py의BrokerCredentialdataclass에daemon_id: str | None = None필드를 추가한다.app/repositories/postgres.py의_row_to_broker_credential정적 메서드가 DB 행에서daemon_id를 읽어BrokerCredential인스턴스를 구성해야 한다.upsert_broker_credential메서드 시그니처에daemon_id: str | None = None파라미터를 추가하고, INSERT/ON CONFLICT 쿼리에daemon_id컬럼 처리를 반영한다. 단, 실제 테이블 컬럼은 REQ-047 마이그레이션이 선행 적용된 후 활성화되므로 이 REQ 단독으로는 DB 컬럼이 존재하지 않는 환경에서도 하위 호환을 고려한다.list_broker_credentials메서드에daemon_id: str | None = None파라미터를 추가하여, 값이 제공되면 daemon_id로 필터링한 결과를 반환하도록 한다.delete_broker_credential메서드 시그니처에daemon_id: str | None = None파라미터를 추가한다.
Acceptance Criteria
- Given
BrokerCredential인스턴스를 생성할 때daemon_id=None이 기본값이면, When 인스턴스를 생성, Thendaemon_id필드가None으로 존재한다. - Given
BrokerCredential인스턴스를 생성할 때daemon_id="daemon-abc"값을 주면, When 인스턴스를 생성, Thendaemon_id필드가"daemon-abc"로 존재한다. - Given
_row_to_broker_credential메서드가 6컬럼 행(daemon_id 포함)을 받으면, When 변환, Then 반환BrokerCredential.daemon_id가 해당 값으로 세팅된다. - Given
_row_to_broker_credential메서드가 기존 6컬럼 행(daemon_id 없음)을 받으면, When 변환, ThenBrokerCredential.daemon_id가None으로 세팅된다(하위 호환). - Given
list_broker_credentials(user_id="u1", daemon_id="d1")를 호출하면, When DB에daemon_id="d1"행과daemon_id="d2"행이 있으면, Thendaemon_id="d1"행만 반환된다. - Given
list_broker_credentials(user_id="u1")(daemon_id 미지정)를 호출하면, When DB에 여러 행이 있으면, Then 모든 행을 반환한다(기존 동작 유지, 하위 호환).
Impacted Area
- Docs:
docs/data-model.md—BrokerCredential엔티티에daemon_id필드 추가, PK 변경 예고(REQ-047 선행 마이그레이션 후 PK=(daemon_id, broker)) 명시.
- Modules:
app/domain/models.py—BrokerCredentialdataclass에daemon_id: str | None = None필드 추가.app/repositories/postgres.py—_row_to_broker_credential,upsert_broker_credential,list_broker_credentials,delete_broker_credential시그니처 및 쿼리 갱신.
- Tests:
BrokerCredentialdataclass 필드 단위 테스트._row_to_broker_credential행 변환 테스트(daemon_id 포함/미포함 두 케이스).list_broker_credentialsdaemon_id 필터 테스트(mock 또는 메모리 repo 기반).
Notes
- REQ-047(마이그레이션) 선행 없이는 실제 DB 컬럼이 없으므로, 이 REQ의 구현은 DB 컬럼 유무에 관계없이 모델/메서드 시그니처만 정합화하는 것을 목표로 한다. 실제 DB 컬럼 처리는 REQ-047 이후 통합 시점에 완성된다.
upsert_broker_credential쿼리의 ON CONFLICT 절 수정은 PK 변경(REQ-047) 완료 이후 정합화한다. 따라서 이 REQ에서 upsert 쿼리의 ON CONFLICT 처리는 설계 위임(REQ-047 delivery 연계).list_broker_credentialsdaemon_id 필터는WHERE daemon_id = %s조건을 추가하는 방식으로 구현하며, NULL 처리는WHERE daemon_id IS NULL또는 파라미터 없음(전체 조회)으로 구분한다.data-model.md의BrokerCredential엔티티 갱신(daemon_id 필드, PK 변경 예고)은 이 REQ 구현 시 함께 반영한다.- Source: dcy-010 FR-1, §4 C1.
Change Log
CHG-20260628-01
- Date: 2026-06-28
- Author: Justin Ko
Change Summary
- 신규 생성 (Proposed) — dcy-010 FR-1 산출물.
Intent
- dcy-010 confirmed Discovery의 FR-1(daemon_id 차원 도입)을 도메인 모델·repository 계층 변경으로 분리하여 REQ로 정규화한다.
Acceptance Criteria Delta
- Added:
- AC-1 ~ AC-6 전체 (신규 초안)
- Updated: 없음
- Removed: 없음
Impacted Area Delta
- Docs:
docs/srs/Data/req-046_broker-credential-daemon-id-field.md신규 생성docs/data-model.md갱신 예고
- Modules:
app/domain/models.py,app/repositories/postgres.py최초 지정
- Tests:
BrokerCredential단위·행 변환·필터 테스트 신규
Delivery Trace Delta
- Batches: 미정 (suggest-batch-reqs 대기)
- Releases: 미정
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: keep-current
- Follow-up Action: confirm-req 후 batch 배정. REQ-047 마이그레이션과 delivery 연계.
Validation Plan
- pytest로 AC-1~6 각 케이스 확인.
_row_to_broker_credential하위호환(AC-4) 포함.
CHG-20260628-02
- Date: 2026-06-28
- Author: 팀장(Claude)
- confirm-req:
Proposed→Approved. dcy-010 FR-1 추적 확인, AC testable, 하위호환(AC-4) 적절. REQ-047 선행 의존 명시됨. blocker 없음.
CHG-20260628-03
- Date: 2026-06-28
- Author: 팀장(Claude)
Change Summary
- confirm-req-implemented:
Approved→Implemented. PR #17 머지(mergeCommitd4acfd4), BAT-020, QC PASS-WITH-NOTES(blocker 0), 테스트 통과.
Intent
- BAT-020 delivery(PR #17 머지)에서 AC-1~6 전 항목 구현 및 테스트 통과가 확인되어 Implemented로 전환한다.
Acceptance Criteria Delta
- Added: 없음
- Updated: 없음
- Removed: 없음
Impacted Area Delta
- 없음 (상태 전환만)
Delivery Trace Delta
- Batches: BAT-020 (PR #17, mergeCommit
d4acfd4) - Releases: 미정
Revalidation Impact
- Reverification Needed: no
- Existing Implementation Invalidated: no
- Status Recommendation: implemented
Validation Plan
- BAT-020 verification 문서 및 QC PASS-WITH-NOTES 결과(blocker 0)로 AC-1~6 근거 확보됨.