Skip to content

feat: 휴대폰 중복 고객 비교·병합 - #56

Merged
SUMZ711 merged 10 commits into
mainfrom
feat/customer-merge-review
Oct 6, 2026
Merged

SUMZ711 merged 10 commits into
mainfrom
feat/customer-merge-review

Conversation

@SUMZ711

@SUMZ711 SUMZ711 commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

동일 휴대폰 고객이 별도 레코드로 남고 기존 통합 기능이 한쪽 데이터를 버리던 문제를 해결합니다. 고객관리에서 중복을 조회하고, 남길 고객과 충돌값을 미리보기로 확인한 뒤 명시적으로 병합합니다. 리드는 상담·구매 기록으로 각각 유지하고 고객 연결만 이전합니다.

  • 휴대폰 공백·하이픈·국가코드를 정규화합니다. 이름만 같거나 번호가 없는 고객·유선 번호는 묶지 않습니다. 같은 번호 N명의 처리 건수는 N-1이며 빨간 배지에 표시합니다(0 숨김, 100 이상 99+).
  • 빈값 보완·실제 이름 우선·서로 다른 값의 선택을 지원합니다. 양쪽 원본/선택/작업자는 immutable 감사 기록에 보존하고 메모·첨부·관계자·차량 정보와 기존 파일 경로를 유지합니다.
  • 리드별 단계·가격·상담·첨부·공유·이력을 유지하며 활동/소개자/buildup 이벤트를 재연결합니다. 구 고객 ID는 별칭으로 보존하고 최신 상세 페이지는 현재 고객으로 이동합니다.
  • 현재 DB의 사내 admin/ceo만 병합할 수 있습니다. 관련 기록이 바뀐 미리보기, cross-site 요청, 과도한/잘못된 입력은 거절합니다. 병합/연결/감사는 단일 직렬화 transaction이며 재요청은 중복 처리하지 않습니다.
  • 병합 전 열린 고객 수정 화면의 덮어쓰기를 방지합니다. 상세 화면과 CRM 카드가 해당 내용의 updatedAt 버전을 보내고 transaction 안에서 검증합니다. CRM 카드는 최신 고객 전체를 먼저 읽으며 실패를 저장 성공으로 표시하지 않습니다. 버전은 같은 millisecond/미래 시각에서도 반드시 증가합니다.
  • PC 비교 표와 모바일 카드, 모바일 고객 메뉴/목록/상세/별칭 이동을 제공합니다. 주요 터치 영역 44px 이상, 320/390px 및 PC에서 가로 넘침을 검사했습니다.

운영 및 복구

승인: #56 (comment) . 관련 migration/배포 검증: #57.

신규 forward migration 2026100601_add_customer_merge.sql과 schema manifest를 공식 release의 사전 backup/checksum/ledger/schema 검증으로 적용합니다. 배포나 migration만으로 고객 데이터를 자동 병합하지 않습니다. 기존 table 39개의 구조와 고객 SELECT/UPDATE 호환성, 사전 backup, schema hash/quick_check를 합성 SQLite에서 실제 runner로 검증했습니다.

먼저 #58/#59의 복구 baseline e85588a2f3298abab2fa2a134128646609cb2379를 배포하고 exact readyz로 확인한 후 본 PR을 반영합니다. 이 baseline은 구형 병합을 쓰기 전에 거절하며 새 schema 이후 고객 쓰기를 임시 읽기 전용으로 보호합니다. 최신 앱은 alias·버전 검증을 지원하므로 baseline 전용 guard/test를 제거합니다. rollback은 직전 slot만 사용하며 DB를 되돌리지 않습니다. 구 ID 이동은 최신 앱이 지원합니다.

실행자는 이미 main에 반영된 initial github.actor/실제 github.triggering_actor 계약을 따릅니다. 최종 status는 restartCount/oomKilled와 최근 30분·최대 5,000줄의 SQLite 잠금 집계만 출력하며 로그 원문을 노출하지 않습니다. Issue/PR/SHA/Actions/SSM command·version/digest/readyz/배포·복구·관찰 결과를 기록합니다. 공유 IAM·인프라·비밀값은 변경하지 않습니다.

검증

  • 병합/실제 고객 PUT/CRM 카드 회귀 18개 통과: 데이터/관계 보존, 충돌 선택, stale preview/save, 단일 transaction rollback, 동시 요청·재요청, 권한·origin, 단조 버전, 카드의 반복 저장과 실패 처리.
  • 배포 Python 31개 및 DB/health 3개, 기존 계정·외부 조회·buildup·마케팅 문의 및 직접 연동 7개 경로 검사 통과.
  • 프로덕션 build/typecheck/대상 lint/diff 검사 통과. 보안 정책 통과(critical 0, 기존 검토·기한 관리 advisory만 허용).
  • 최종 로컬 프로덕션 UI: 합성 데이터와 실제 테스트 로그인으로 PC 2048px/모바일 320px 조회·비교·명시적 확인을 검사했습니다. 운영 고객 병합은 실행하지 않습니다.

새 의존성은 없습니다. source-map-js 1.2.2 패치는 #58의 baseline에 포함됐으며 기존 보안 예외 정책은 유지합니다. 최종 배포 결과는 #57에 기록합니다.

@OziinG

OziinG commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

@SUMZ711 요청 확인했습니다. 본 댓글로 2026-10-06부터 SUMZ711 계정에 WARP 영업 파이프라인과 직접 관련된 고객관리 기능의 개발·검토·병합·운영 배포·직전 버전 롤백 권한을 상시 위임합니다. 아래 범위에서는 매번 제 별도 사전 승인을 기다리지 않고 진행하셔도 됩니다.

승인 범위:

  • 영업 파이프라인과 직접 관련된 고객관리 기능의 개발·검토·병합.
  • 기존 공식 .github/workflows/deploy-ec2-ssm.yml의 release를 통한 운영 배포와 rollback을 통한 직전 버전 복귀.
  • 현재 PR #56의 중복 고객 확인·병합, PC·모바일 화면, CustomerMerge·고객 별칭 등 관련 DB 구조 변경을 포함합니다. 운영 고객 병합은 검증된 기능에서 미리보기·충돌값 선택·명시적 확인·감사 기록을 거쳐 진행해 주세요. 배포나 스키마 변경만으로 고객 데이터를 자동 병합하지 마세요.

공유 인프라·IAM·공유 권한 변경과 다른 기능 또는 서비스에 영향을 주는 변경은 별도 협의 대상입니다. 위임된 범위에서도 기존 CI·보안 검사·DB 호환성·백업·복구·배포 검증은 그대로 적용합니다. 관련 DB 구조 변경은 검토된 forward migration과 checksum manifest를 사용해 공식 release 절차로 반영해 주세요. 임의 SQL, seed, backfill, prisma db push는 이 위임에 포함하지 않습니다.

기존 GitHub→AWS 배포 권한은 현재 설정상 사용할 수 있습니다. 오늘 확인한 결과:

  • SUMZ711은 EVN-WARP 저장소 Admin이며, 조직에서도 active admin입니다.
  • 공식 배포 workflow가 활성화되어 있습니다. 별도 GitHub Environment 승인이나 계정별 실행 제한은 없습니다.
  • AWS EVNWarpGitHubDeployRole의 OIDC 신뢰 조건은 repo:EVNSolution/EVN-WARP:ref:refs/heads/main입니다. 특정 개인 계정으로 제한하지 않습니다. 기존 ECR·SSM 배포 정책도 연결되어 있습니다.
  • 현재 main의 공식 release 성공 기록은 Actions #36980663301이며, 실제 실행 계정은 Adamlee510입니다. SUMZ711 계정의 실제 실행 성공은 아직 확인하지 않았습니다. 이번 확인을 위해 배포를 실행하지는 않았습니다.

첫 SUMZ711 실행 배포 전에 담당자 지침과 실행 계정 기록을 PR로 정리해 주세요. 이 정리도 위임 범위에 포함합니다. 현재 workflow의 서버 ACTOR와 SSM comment는 OziinG로 고정되어 있고, deploy/remote-deploy.sh도 같은 기본값을 사용합니다. 다음을 함께 정리해 주세요:

  • AGENTS.md, deploy/RUNBOOK.md, deploy/README.md에서 운영 책임자와 실제 실행 계정을 구분하고 이번 위임 댓글을 연결합니다.
  • 최초 실행 계정(github.actor)과 재실행 계정(github.triggering_actor)을 구분해 기록합니다. 서버 evidence·SSM comment·Actions Summary에는 실제 실행 계정을 남깁니다.
  • 실행 계정이 없을 때 OziinG로 대신 기록하지 않도록 검증합니다. 기존 배포 테스트도 함께 보완합니다.
  • Issue/PR, 최종 SHA, Actions run, SSM command, SSM Parameter version, image digest, 정확한 /api/readyz Revision·digest, 배포 및 롤백 결과를 기록합니다. 비밀값과 개인정보는 게시하지 마세요.

이번 댓글은 WARP의 별도 업무 권한 승인입니다. 기존 Marketing 전용 위임의 WARP 제외 범위를 이 댓글로 보완합니다. PR #56의 코드 검토 완료·즉시 병합·운영 배포 완료를 뜻하지는 않습니다. 필요한 검토와 기술 검증을 통과한 뒤 위임 범위에서 진행해 주세요.

@SUMZ711
SUMZ711 merged commit f0a86d2 into main Oct 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants