feat: 인메모리 Set으로 QR 중복 출석 방지 추가 - #9
Conversation
주요 변경사항이 PR은 QR 코드 스캔 시 중복 출석 처리를 방지하는 기능을 추가합니다. 알림 유틸에 정보 메시지 표시 함수를 추가하고, 스캐너 컴포넌트에서 이미 처리된 회원을 추적하여 중복 등록을 방지합니다. 변경사항QR 스캔 중복 방지
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/components/QRScanner.tsx (1)
29-29: ⚡ Quick winQR 스캐너 닫았다 열면 processedMemberIdsRef(중복 방지 Set) 리셋되는 동작 확인
processedMemberIdsRef는QRScanner컴포넌트 내부useRef상태라, 다이얼로그가 닫혀QRScannerComponent가 언마운트되면 초기화됩니다.
현재QRScanner의onClose(닫기 버튼/세션 만료)가 상위handleCloseQR로 전달되고,handleCloseQR에서setQrActivityId(null)(URL의id파라미터 삭제)이 호출되면서qrActivityId !== null조건부 렌더가 해제되어 언마운트가 일어납니다.이 “닫았다가 다시 열면 이전에 처리된 memberId 기록이 사라짐”이 의도된 것인지 확인해 주세요.
- 의도된 경우: 세션 단위로 중복 방지를 새로 시작하는 설계로 적절함
- 의도되지 않은 경우: Set을 상위(페이지/세션) 상태로 끌어올려 닫기 전후에 유지되도록 조정 필요
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/QRScanner.tsx` at line 29, QRScanner 내부의 useRef 변수 processedMemberIdsRef가 컴포넌트 언마운트 시 리셋되어 "닫았다 열면 중복 방지 기록이 사라지는" 동작이 발생합니다; 의도하지 않았다면 processedMemberIdsRef를 상위 상태로 끌어올려 유지해야 합니다. 구체적으로는 QRScannerComponent/QRScanner에서 사용하던 processedMemberIdsRef를 상위 컴포넌트(페이지)로 올리고 useState 또는 useRef로 관리한 뒤 해당 상태(예: processedMemberIds)를 QRScanner에 props로 전달하고, QRScanner 내에서 기존 processedMemberIdsRef 대신 전달된 props(예: processedMemberIds, setProcessedMemberIds 또는 addProcessedMember 함수)를 사용하도록 변경하세요; 반대로 의도된 동작이면 아무 변경하지 말고 onClose → handleCloseQR → setQrActivityId(null) 흐름을 그대로 유지하십시오 (참조 심볼: processedMemberIdsRef, QRScanner/QRScannerComponent, onClose, handleCloseQR, setQrActivityId).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/components/QRScanner.tsx`:
- Line 29: QRScanner 내부의 useRef 변수 processedMemberIdsRef가 컴포넌트 언마운트 시 리셋되어 "닫았다
열면 중복 방지 기록이 사라지는" 동작이 발생합니다; 의도하지 않았다면 processedMemberIdsRef를 상위 상태로 끌어올려 유지해야
합니다. 구체적으로는 QRScannerComponent/QRScanner에서 사용하던 processedMemberIdsRef를 상위
컴포넌트(페이지)로 올리고 useState 또는 useRef로 관리한 뒤 해당 상태(예: processedMemberIds)를
QRScanner에 props로 전달하고, QRScanner 내에서 기존 processedMemberIdsRef 대신 전달된 props(예:
processedMemberIds, setProcessedMemberIds 또는 addProcessedMember 함수)를 사용하도록
변경하세요; 반대로 의도된 동작이면 아무 변경하지 말고 onClose → handleCloseQR → setQrActivityId(null)
흐름을 그대로 유지하십시오 (참조 심볼: processedMemberIdsRef, QRScanner/QRScannerComponent,
onClose, handleCloseQR, setQrActivityId).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: eb651c21-509e-4f61-87a8-54ebcfa4c491
📒 Files selected for processing (2)
src/components/QRScanner.tsxsrc/utils/alert.tsx
KwonDeaGeun
left a comment
There was a problem hiding this comment.
LGTM!
Id 저장을 Set으로 한 것도 좋고, useRef도 적절하다고 생각합니다.
Summary by CodeRabbit
릴리스 노트
New Features
Bug Fixes