{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\pages\\\\Statistics.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from \"react\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function Statistics() {\n  _s();\n  const [token, setToken] = useState(\"\"); // 입력받을 FCM 토큰\n  const [message, setMessage] = useState(\"\");\n  const [result, setResult] = useState(\"\");\n\n  // FCM API 호출 함수\n  const handleSendFCM = async () => {\n    if (!token) {\n      setResult(\"FCM 토큰을 입력하세요.\");\n      return;\n    }\n    setResult(\"전송 중...\");\n    try {\n      const jwt = localStorage.getItem(\"token\"); // 로그인 시 저장한 토큰 꺼내기\n      const res = await fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Authorization\": `Bearer ${jwt}`\n        },\n        body: JSON.stringify({\n          token: token,\n          title: \"테스트 알림\",\n          body: message || \"테스트 메시지입니다.\"\n        })\n      });\n      const data = await res.json();\n      if (data.success) setResult(\"성공! \" + data.response);else setResult(\"실패: \" + data.error);\n    } catch (e) {\n      setResult(\"에러: \" + e.toString());\n    }\n  };\n  return /*#__PURE__*/_jsxDEV(\"section\", {\n    children: [/*#__PURE__*/_jsxDEV(\"header\", {\n      className: \"main\",\n      children: /*#__PURE__*/_jsxDEV(\"h1\", {\n        children: \"Statistics\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 42,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 41,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n      children: \"\\uD1B5\\uACC4 \\uD398\\uC774\\uC9C0\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 44,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n      children: \"\\uC5EC\\uAE30\\uC11C \\uD1B5\\uACC4 \\uC804\\uC6A9 \\uAE30\\uB2A5 \\uCD94\\uAC00\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 45,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        marginTop: 30,\n        padding: 20,\n        border: \"1px solid #eee\",\n        borderRadius: 12\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n        children: \"FCM \\uD14C\\uC2A4\\uD2B8\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 48,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n        style: {\n          width: \"100%\",\n          marginBottom: 8\n        },\n        type: \"text\",\n        value: token,\n        onChange: e => setToken(e.target.value),\n        placeholder: \"FCM \\uD1A0\\uD070\\uC744 \\uC785\\uB825\\uD558\\uC138\\uC694\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 49,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n        style: {\n          width: \"100%\",\n          marginBottom: 8\n        },\n        type: \"text\",\n        value: message,\n        onChange: e => setMessage(e.target.value),\n        placeholder: \"\\uBA54\\uC2DC\\uC9C0 \\uB0B4\\uC6A9(\\uC0DD\\uB7B5 \\uAC00\\uB2A5)\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 56,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n        onClick: handleSendFCM,\n        children: \"FCM \\uD478\\uC2DC \\uD14C\\uC2A4\\uD2B8\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 63,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          marginTop: 10,\n          color: \"#0b8\"\n        },\n        children: result\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 64,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 47,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 40,\n    columnNumber: 5\n  }, this);\n}\n_s(Statistics, \"yApL5TTmn3Qy6jY4v4gHOwn0lUk=\");\n_c = Statistics;\nvar _c;\n$RefreshReg$(_c, \"Statistics\");","map":{"version":3,"names":["React","useState","jsxDEV","_jsxDEV","Statistics","_s","token","setToken","message","setMessage","result","setResult","handleSendFCM","jwt","localStorage","getItem","res","fetch","method","headers","body","JSON","stringify","title","data","json","success","response","error","e","toString","children","className","fileName","_jsxFileName","lineNumber","columnNumber","style","marginTop","padding","border","borderRadius","width","marginBottom","type","value","onChange","target","placeholder","onClick","color","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/pages/Statistics.js"],"sourcesContent":["import React, { useState } from \"react\";\r\n\r\nexport default function Statistics() {\r\n  const [token, setToken] = useState(\"\"); // 입력받을 FCM 토큰\r\n  const [message, setMessage] = useState(\"\");\r\n  const [result, setResult] = useState(\"\");\r\n\r\n  // FCM API 호출 함수\r\n  const handleSendFCM = async () => {\r\n    if (!token) {\r\n      setResult(\"FCM 토큰을 입력하세요.\");\r\n      return;\r\n    }\r\n    setResult(\"전송 중...\");\r\n\r\n    try {\r\n      const jwt = localStorage.getItem(\"token\"); // 로그인 시 저장한 토큰 꺼내기\r\n      const res = await fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          \"Authorization\": `Bearer ${jwt}`,\r\n        },\r\n        body: JSON.stringify({\r\n          token: token,\r\n          title: \"테스트 알림\",\r\n          body: message || \"테스트 메시지입니다.\",\r\n        }),\r\n      });\r\n\r\n      const data = await res.json();\r\n      if (data.success) setResult(\"성공! \" + data.response);\r\n      else setResult(\"실패: \" + data.error);\r\n    } catch (e) {\r\n      setResult(\"에러: \" + e.toString());\r\n    }\r\n  };\r\n\r\n  return (\r\n    <section>\r\n      <header className=\"main\">\r\n        <h1>Statistics</h1>\r\n      </header>\r\n      <h2>통계 페이지</h2>\r\n      <p>여기서 통계 전용 기능 추가</p>\r\n\r\n      <div style={{ marginTop: 30, padding: 20, border: \"1px solid #eee\", borderRadius: 12 }}>\r\n        <h3>FCM 테스트</h3>\r\n        <input\r\n          style={{ width: \"100%\", marginBottom: 8 }}\r\n          type=\"text\"\r\n          value={token}\r\n          onChange={e => setToken(e.target.value)}\r\n          placeholder=\"FCM 토큰을 입력하세요\"\r\n        />\r\n        <input\r\n          style={{ width: \"100%\", marginBottom: 8 }}\r\n          type=\"text\"\r\n          value={message}\r\n          onChange={e => setMessage(e.target.value)}\r\n          placeholder=\"메시지 내용(생략 가능)\"\r\n        />\r\n        <button onClick={handleSendFCM}>FCM 푸시 테스트</button>\r\n        <div style={{ marginTop: 10, color: \"#0b8\" }}>{result}</div>\r\n      </div>\r\n    </section>\r\n  );\r\n}\r\n\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}