diff --git a/src/apis/qrApi.ts b/src/apis/qrApi.ts index e279b52..d9073d9 100644 --- a/src/apis/qrApi.ts +++ b/src/apis/qrApi.ts @@ -1,13 +1,8 @@ import axiosWithAuthorization from "../contexts/axiosWithAuthorization"; // 출입 검증 -export const verifyQR = async (allowedAreas: string[], deviceAreaCode: string) => { +export const verifyQR = async (payload: any) => { try { - const payload = { - deviceAreaCode, - allowedAreas, - }; - console.log("전송할 payload:", payload); const res = await axiosWithAuthorization.post(`/entrances/verify`, payload); console.log("출입 검증:", res.data); diff --git a/src/pages/QRCodeScanner.tsx b/src/pages/QRCodeScanner.tsx index b117c1a..7bc040f 100644 --- a/src/pages/QRCodeScanner.tsx +++ b/src/pages/QRCodeScanner.tsx @@ -40,6 +40,7 @@ const QRCodeScanner = () => { const buildingName = localStorage.getItem("buildingName") || ""; const zoneName = localStorage.getItem("zoneName") || ""; + const direction = localStorage.getItem("direction") || ""; const isZoneMode = !!zoneName; const isScanningRef = useRef(false); @@ -64,21 +65,36 @@ const QRCodeScanner = () => { ); const handleScan = async (parsed: any) => { - const allowedAreas = parsed?.vp?.verifiableCredential?.credentialSubject?.allowedAreas; - const deviceAreaCode = localStorage.getItem("deviceAreaCode") || ""; - - if (Array.isArray(allowedAreas) && deviceAreaCode) { - try { - const result = await verifyQR(allowedAreas, deviceAreaCode); - showMessage(result ? STATUS_MESSAGES.ACCESS_GRANTED : STATUS_MESSAGES.ACCESS_DENIED); - } catch (err: unknown) { - console.error("출입 데이터 전송 실패", err); - showMessage(STATUS_MESSAGES.VERIFY_FAILED); + const deviceAreaCode = localStorage.getItem("deviceAreaCode") || ""; + const deviceAreaId = localStorage.getItem("deviceAreaId"); + const deviceLocationType = localStorage.getItem("deviceLocationType") || ""; + + if (Array.isArray(parsed?.accessAreaCodes) && deviceAreaCode) { + try { + const payload: any = { + ...parsed, + deviceAreaCode, + deviceAreaId: deviceAreaId ? Number(deviceAreaId) : undefined, + deviceLocationType, + }; + + // BUILDING인 경우에만 direction 추가 + if (direction) { + payload.direction = direction; } - } else { - showMessage(STATUS_MESSAGES.INVALID_QR); + + console.log("출입 verify 요청 payload:", payload); + + const result = await verifyQR(payload); + showMessage(result ? STATUS_MESSAGES.ACCESS_GRANTED : STATUS_MESSAGES.ACCESS_DENIED); + } catch (err: unknown) { + console.error("출입 데이터 전송 실패", err); + showMessage(STATUS_MESSAGES.VERIFY_FAILED); } - }; + } else { + showMessage(STATUS_MESSAGES.INVALID_QR); + } +}; scannerRef.current = scanner; (window as any).scannerRef = scannerRef; @@ -112,7 +128,7 @@ const QRCodeScanner = () => { } setError(null); - if (typeof parsed === "object" && parsed?.vp?.verifiableCredential?.credentialSubject) { + if (typeof parsed === "object" && parsed?.passId && parsed?.accessAreaCodes) { handleScan(parsed); } else { showMessage(STATUS_MESSAGES.INVALID_QR); @@ -169,7 +185,9 @@ const QRCodeScanner = () => { KEYWE Logo

QR 스캔 후 출입이 가능합니다!

- {isZoneMode ? `${buildingName} / ${zoneName}` : buildingName} + {isZoneMode + ? `${buildingName} / ${zoneName}` + : `${buildingName} / ${direction}`}