확장이 훅으로 등록한 카탈로그에서 고른 값은 그 확장이 사라져도 저장값으로 남는다. 그 상태에서 값만 보고 판정하면 이미 제공 불가한 항목이 사용자 화면에 그대로 노출된다. 예외도 경고도 로그도 남지 않아 관리자 화면과 나란히 보지 않으면 드러나지 않는다. - 결제수단에 지정한 PG, 현금영수증 발급사, 검색엔진 드라이버 세 축에 같은 판정을 적용. 공개 응답에서는 제거하고 관리자 응답에는 표시를 남긴다 — 운영자가 고쳐야 할 대상이라 감추면 복구 경로가 사라진다. 서버 검증도 같은 판정을 공유해 화면 우회 제출을 막는다. - 설정 단건 저장이 벌크 저장과 다른 경로를 타던 문제를 코어·이커머스·게시판에서 정리. 저장은 성공하고 파생 값만 갱신되지 않아 어느 화면에서 저장했느냐로 결과가 갈렸다. - 단건 저장의 값 형태 계약 신설. 빈 값으로 되돌릴 수 있게 하고, 타입은 defaults.json 의 기본값을 SSoT 로 삼는다. 해석 불가한 입력은 조용히 캐스팅하지 않고 거절한다. - 드라이버 셀렉트를 서버 카탈로그에 바인딩하고, 저장값이 카탈로그에 없으면 그 값을 드러내는 안내를 8곳 전수에 붙인다. 종전에는 빈 칸으로만 보여 무엇이 저장됐는지 알 수 없었다. 시나리오 매니페스트 8종을 면제 없이 신설했다. `audit:allow` 는 cross product 와 effects 검사를 함께 끄므로, 면제가 걸린 매니페스트에 선언을 추가하면 검증이 회복되지 않는다. 그 아래에서 대응 테스트가 없는 effect 이름 2건이 살아남아 있었고, 함께 정리했다.
43 lines
2.6 KiB
YAML
43 lines
2.6 KiB
YAML
feature: 이커머스 단건 설정 저장의 파이프라인 통과 (B-1)
|
|
|
|
description: |
|
|
이커머스 설정은 저장 전에 여러 단계를 거친다 — 분할 입력 필드 병합, 통화 기본값 동기화,
|
|
결제수단 메타데이터 스냅샷, 은행명 다국어 정규화. 벌크 저장(`saveSettings`)은 그 파이프라인을
|
|
전부 통과하는데, 단건 저장(`setSetting`)은 값 하나를 파일에 바로 써 넣었다.
|
|
|
|
그래서 같은 값을 어느 화면에서 저장했느냐에 따라 결과가 달라졌다. 오류는 나지 않는다 —
|
|
저장은 성공하고, 파생 값만 갱신되지 않은 채 남는다.
|
|
|
|
단건 저장이 딛는 기준(payload_basis)도 문제였다. 조회 결과에는 읽기 시점 보강값(카탈로그
|
|
라벨 등)이 섞여 있고, 삭제된 통화의 tombstone 은 조회에서 걸러진다. 조회 결과를 기준으로
|
|
덮어쓰면 보강값이 파일에 눌어붙고 tombstone 이 사라진다 — 저장된 파일이 기준이어야 한다.
|
|
|
|
axis_notes:
|
|
pipeline_stage: |
|
|
벌크 경로가 이미 수행하던 단계를 단건 경로에도 통과시킨다. 각 단계는 서로 다른 입력을
|
|
보므로 조합이 아니라 독립 축이다 — 한 단계를 통과시켜도 다른 단계가 빠지면 그 축만
|
|
조용히 어긋난다.
|
|
|
|
axes:
|
|
pipeline_stage:
|
|
- stored_file_basis # 저장 파일 기준 병합 (조회 결과 기준 금지)
|
|
- currency_default_sync # is_default 통화 ↔ default_currency 일치
|
|
- split_fields # 화면의 분할 입력 필드를 한 키로 병합
|
|
- payment_method_snapshot # 결제수단 카탈로그 메타데이터 박제
|
|
- currency_cache_flush # 요청 캐시 무효화
|
|
- normalize_category_data # 카테고리 단위 정규화 (은행명 다국어)
|
|
|
|
effects:
|
|
- read_time_enrichment_not_persisted # 읽기 시점 보강값이 파일에 눌어붙지 않는다
|
|
- other_category_file_untouched # 단건 저장이 다른 카테고리 파일을 건드리지 않는다
|
|
- removed_currency_tombstone_preserved # 삭제 통화 tombstone 보존
|
|
- saved_file_default_currency_matches_is_default
|
|
- split_input_fields_merged_on_single_key_save
|
|
- payment_method_metadata_snapshotted
|
|
- currency_request_cache_cleared_on_single_key_save
|
|
- bank_name_normalized_to_multilingual
|
|
- sibling_keys_preserved_on_bank_save # 은행 저장이 같은 카테고리의 형제 키를 지우지 않는다
|
|
|
|
test_files:
|
|
- modules/_bundled/sirsoft-ecommerce/tests/Unit/Services/EcommerceSettingsSetSettingPipelineTest.php
|