{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\pages\\\\Admin.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from \"react\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function Admin() {\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 res = await fetch(\"/api/fcm/send\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\"\n          // Authorization: \"Bearer xxx\"  // 필요시 인증 추가\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(\"h2\", {\n      children: \"\\uAD00\\uB9AC\\uC790 \\uD398\\uC774\\uC9C0\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 40,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n      children: \"\\uC5EC\\uAE30\\uC11C \\uAD00\\uB9AC\\uC790 \\uC804\\uC6A9 \\uAE30\\uB2A5 \\uCD94\\uAC00\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 41,\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: 44,\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: 45,\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: 52,\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: 59,\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: 60,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 43,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 39,\n    columnNumber: 5\n  }, this);\n}\n_s(Admin, \"yApL5TTmn3Qy6jY4v4gHOwn0lUk=\");\n_c = Admin;\nvar _c;\n$RefreshReg$(_c, \"Admin\");","map":{"version":3,"names":["React","useState","jsxDEV","_jsxDEV","Admin","_s","token","setToken","message","setMessage","result","setResult","handleSendFCM","res","fetch","method","headers","body","JSON","stringify","title","data","json","success","response","error","e","toString","children","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/Admin.js"],"sourcesContent":["import React, { useState } from \"react\";\r\n\r\nexport default function Admin() {\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 res = await fetch(\"/api/fcm/send\", {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          // Authorization: \"Bearer xxx\"  // 필요시 인증 추가\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      <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"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}