Taichi Masuyama 3 lat temu
rodzic
commit
308ae6cb3b

+ 3 - 7
packages/app/src/components/Questionnaire/ProactiveQuestionnaireModal.tsx

@@ -5,7 +5,7 @@ import {
   Modal, ModalBody,
 } from 'reactstrap';
 
-import { useSiteUrl, useGrowiVersion } from '~/stores/context';
+import { apiv3Post } from '~/client/util/apiv3-client';
 
 type ModalProps = {
   isOpen: boolean,
@@ -44,8 +44,6 @@ const ProactiveQuestionnaireModal = (props: ModalProps): JSX.Element => {
   const { t } = useTranslation();
 
   const { isOpen, onClose } = props;
-  const { data: siteUrl } = useSiteUrl();
-  const { data: growiVersion } = useGrowiVersion();
 
   const [isQuestionnaireCompletionModal, setQuestionnaireCompletionModal] = useState(false);
 
@@ -68,15 +66,13 @@ const ProactiveQuestionnaireModal = (props: ModalProps): JSX.Element => {
       position,
       occupation,
       commentText,
-      growiUri: siteUrl,
-      growiVersion,
     };
 
-    // TODO: send questionnaire data
+    apiv3Post('/questionnaire/proactive/answer', sendValues);
 
     onClose();
     setQuestionnaireCompletionModal(true);
-  }, [growiVersion, onClose, siteUrl]);
+  }, [onClose]);
 
   return (
     <>

+ 30 - 0
packages/app/src/server/routes/apiv3/questionnaire.ts

@@ -54,6 +54,36 @@ module.exports = (crowi: Crowi): Router => {
     }
   });
 
+  router.post('/proactive/answer', accessTokenParser, loginRequired, async(req: AuthorizedRequest, res: ApiV3Response) => {
+    const sendQuestionnaireAnswer = async() => {
+      const growiQuestionnaireServerOrigin = crowi.configManager?.getConfig('crowi', 'app:growiQuestionnaireServerOrigin');
+      const growiInfo = await crowi.questionnaireService!.getGrowiInfo();
+      const userInfo = crowi.questionnaireService!.getUserInfo(req.user ?? null, growiInfo.appSiteUrlHashed);
+
+      const body = {
+        satisfaction: req.body.satisfaction,
+        lengthOfExperience: req.body.lengthOfExperience,
+        position: req.body.position,
+        occupation: req.body.occupation,
+        commentText: req.body.commentText,
+        growiInfo,
+        userInfo,
+        answeredAt: new Date(),
+      };
+
+      await axios.post(`${growiQuestionnaireServerOrigin}/questionnaire-answer/proactive`, body);
+    };
+
+    try {
+      await sendQuestionnaireAnswer();
+      return res.apiv3({});
+    }
+    catch (err) {
+      logger.error(err);
+      return res.apiv3Err(err, 500);
+    }
+  });
+
   router.put('/answer', accessTokenParser, loginRequired, async(req: AuthorizedRequest, res: ApiV3Response) => {
     const sendQuestionnaireAnswer = async(user, answers) => {
       const growiQuestionnaireServerOrigin = crowi.configManager?.getConfig('crowi', 'app:growiQuestionnaireServerOrigin');