{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\pages\\\\Statistics.js\",\n  _s = $RefreshSig$();\nimport React, { useEffect, useState } from \"react\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function FCMTest({\n  user,\n  fcmToken\n}) {\n  _s();\n  const [result, setResult] = useState(\"\");\n  const [loading, setLoading] = useState(false);\n  useEffect(() => {\n    if (!user || !fcmToken) return; // 로그인/토큰 모두 필요\n\n    setLoading(true);\n    setResult(\"\");\n    fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Authorization\": `Bearer ${user.token}`\n      },\n      body: JSON.stringify({\n        token: fcmToken,\n        title: \"테스트 알림\",\n        body: \"이것은 FCM useEffect 테스트 메시지입니다.\"\n      })\n    }).then(async res => {\n      if (!res.ok) {\n        const msg = await res.text();\n        throw new Error(msg || res.statusText);\n      }\n      return res.json();\n    }).then(data => {\n      if (data.success) setResult(\"성공: \" + data.response);else setResult(\"실패: \" + (data.error || \"\"));\n    }).catch(err => {\n      setResult(\"에러: \" + err.message);\n    }).finally(() => setLoading(false));\n  }, [user, fcmToken]); // user 또는 fcmToken 바뀔 때마다 실행\n\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    style: {\n      margin: 20,\n      padding: 16,\n      border: \"1px solid #eee\",\n      borderRadius: 10\n    },\n    children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n      children: \"FCM useEffect \\uD14C\\uC2A4\\uD2B8\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 44,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      children: [/*#__PURE__*/_jsxDEV(\"b\", {\n        children: \"FCM \\uD1A0\\uD070:\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 46,\n        columnNumber: 9\n      }, this), \" \", /*#__PURE__*/_jsxDEV(\"span\", {\n        style: {\n          fontSize: 12\n        },\n        children: fcmToken || \"(없음)\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 46,\n        columnNumber: 24\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 45,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      children: [/*#__PURE__*/_jsxDEV(\"b\", {\n        children: \"\\uACB0\\uACFC:\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 49,\n        columnNumber: 9\n      }, this), \" \", loading ? \"전송 중...\" : result]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 48,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 43,\n    columnNumber: 5\n  }, this);\n}\n_s(FCMTest, \"8rIUtCLtPqHx+EswfjjvoyXPly0=\");\n_c = FCMTest;\nvar _c;\n$RefreshReg$(_c, \"FCMTest\");","map":{"version":3,"names":["React","useEffect","useState","jsxDEV","_jsxDEV","FCMTest","user","fcmToken","_s","result","setResult","loading","setLoading","fetch","method","headers","token","body","JSON","stringify","title","then","res","ok","msg","text","Error","statusText","json","data","success","response","error","catch","err","message","finally","style","margin","padding","border","borderRadius","children","fileName","_jsxFileName","lineNumber","columnNumber","fontSize","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/pages/Statistics.js"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\r\n\r\nexport default function FCMTest({ user, fcmToken }) {\r\n  const [result, setResult] = useState(\"\");\r\n  const [loading, setLoading] = useState(false);\r\n\r\n  useEffect(() => {\r\n    if (!user || !fcmToken) return; // 로그인/토큰 모두 필요\r\n\r\n    setLoading(true);\r\n    setResult(\"\");\r\n\r\n    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 ${user.token}`,\r\n      },\r\n      body: JSON.stringify({\r\n        token: fcmToken,\r\n        title: \"테스트 알림\",\r\n        body: \"이것은 FCM useEffect 테스트 메시지입니다.\",\r\n      }),\r\n    })\r\n      .then(async (res) => {\r\n        if (!res.ok) {\r\n          const msg = await res.text();\r\n          throw new Error(msg || res.statusText);\r\n        }\r\n        return res.json();\r\n      })\r\n      .then((data) => {\r\n        if (data.success) setResult(\"성공: \" + data.response);\r\n        else setResult(\"실패: \" + (data.error || \"\"));\r\n      })\r\n      .catch((err) => {\r\n        setResult(\"에러: \" + err.message);\r\n      })\r\n      .finally(() => setLoading(false));\r\n  }, [user, fcmToken]); // user 또는 fcmToken 바뀔 때마다 실행\r\n\r\n  return (\r\n    <div style={{ margin: 20, padding: 16, border: \"1px solid #eee\", borderRadius: 10 }}>\r\n      <h3>FCM useEffect 테스트</h3>\r\n      <div>\r\n        <b>FCM 토큰:</b> <span style={{ fontSize: 12 }}>{fcmToken || \"(없음)\"}</span>\r\n      </div>\r\n      <div>\r\n        <b>결과:</b> {loading ? \"전송 중...\" : result}\r\n      </div>\r\n    </div>\r\n  );\r\n}"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAAC,SAAAC,MAAA,IAAAC,OAAA;AAEnD,eAAe,SAASC,OAAOA,CAAC;EAAEC,IAAI;EAAEC;AAAS,CAAC,EAAE;EAAAC,EAAA;EAClD,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGR,QAAQ,CAAC,EAAE,CAAC;EACxC,MAAM,CAACS,OAAO,EAAEC,UAAU,CAAC,GAAGV,QAAQ,CAAC,KAAK,CAAC;EAE7CD,SAAS,CAAC,MAAM;IACd,IAAI,CAACK,IAAI,IAAI,CAACC,QAAQ,EAAE,OAAO,CAAC;;IAEhCK,UAAU,CAAC,IAAI,CAAC;IAChBF,SAAS,CAAC,EAAE,CAAC;IAEbG,KAAK,CAAC,uCAAuC,EAAE;MAC7CC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,UAAUT,IAAI,CAACU,KAAK;MACvC,CAAC;MACDC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAC;QACnBH,KAAK,EAAET,QAAQ;QACfa,KAAK,EAAE,QAAQ;QACfH,IAAI,EAAE;MACR,CAAC;IACH,CAAC,CAAC,CACCI,IAAI,CAAC,MAAOC,GAAG,IAAK;MACnB,IAAI,CAACA,GAAG,CAACC,EAAE,EAAE;QACX,MAAMC,GAAG,GAAG,MAAMF,GAAG,CAACG,IAAI,CAAC,CAAC;QAC5B,MAAM,IAAIC,KAAK,CAACF,GAAG,IAAIF,GAAG,CAACK,UAAU,CAAC;MACxC;MACA,OAAOL,GAAG,CAACM,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC,CACDP,IAAI,CAAEQ,IAAI,IAAK;MACd,IAAIA,IAAI,CAACC,OAAO,EAAEpB,SAAS,CAAC,MAAM,GAAGmB,IAAI,CAACE,QAAQ,CAAC,CAAC,KAC/CrB,SAAS,CAAC,MAAM,IAAImB,IAAI,CAACG,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CACDC,KAAK,CAAEC,GAAG,IAAK;MACdxB,SAAS,CAAC,MAAM,GAAGwB,GAAG,CAACC,OAAO,CAAC;IACjC,CAAC,CAAC,CACDC,OAAO,CAAC,MAAMxB,UAAU,CAAC,KAAK,CAAC,CAAC;EACrC,CAAC,EAAE,CAACN,IAAI,EAAEC,QAAQ,CAAC,CAAC,CAAC,CAAC;;EAEtB,oBACEH,OAAA;IAAKiC,KAAK,EAAE;MAAEC,MAAM,EAAE,EAAE;MAAEC,OAAO,EAAE,EAAE;MAAEC,MAAM,EAAE,gBAAgB;MAAEC,YAAY,EAAE;IAAG,CAAE;IAAAC,QAAA,gBAClFtC,OAAA;MAAAsC,QAAA,EAAI;IAAiB;MAAAC,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAAI,CAAC,eAC1B1C,OAAA;MAAAsC,QAAA,gBACEtC,OAAA;QAAAsC,QAAA,EAAG;MAAO;QAAAC,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAG,CAAC,KAAC,eAAA1C,OAAA;QAAMiC,KAAK,EAAE;UAAEU,QAAQ,EAAE;QAAG,CAAE;QAAAL,QAAA,EAAEnC,QAAQ,IAAI;MAAM;QAAAoC,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAO,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACtE,CAAC,eACN1C,OAAA;MAAAsC,QAAA,gBACEtC,OAAA;QAAAsC,QAAA,EAAG;MAAG;QAAAC,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAG,CAAC,KAAC,EAACnC,OAAO,GAAG,SAAS,GAAGF,MAAM;IAAA;MAAAkC,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACrC,CAAC;EAAA;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACH,CAAC;AAEV;AAACtC,EAAA,CAlDuBH,OAAO;AAAA2C,EAAA,GAAP3C,OAAO;AAAA,IAAA2C,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}