2
0
Эх сурвалжийг харах

refs 113224: apply feedback

Futa Arai 3 жил өмнө
parent
commit
f465856a04

+ 1 - 0
packages/app/.env.development

@@ -18,6 +18,7 @@ HACKMD_URI_FOR_SERVER="http://hackmd:3000"
 OGP_URI="http://ogp:8088"
 OGP_URI="http://ogp:8088"
 GROWI_QUESTIONNAIRE_SERVER_ORIGIN="http://host.docker.internal:3003"
 GROWI_QUESTIONNAIRE_SERVER_ORIGIN="http://host.docker.internal:3003"
 GROWI_QUESTIONNAIRE_SERVER_ORIGIN_CLIENT_SIDE="http://localhost:3003"
 GROWI_QUESTIONNAIRE_SERVER_ORIGIN_CLIENT_SIDE="http://localhost:3003"
+AUTO_INSTALL_ALLOW_GUEST_MODE=true
 # DRAWIO_URI="http://localhost:8080/?offline=1&https=0"
 # DRAWIO_URI="http://localhost:8080/?offline=1&https=0"
 # S2SMSG_PUBSUB_SERVER_TYPE=nchan
 # S2SMSG_PUBSUB_SERVER_TYPE=nchan
 # PUBLISH_OPEN_API=true
 # PUBLISH_OPEN_API=true

+ 0 - 1
packages/app/public/static/locales/en_US/translation.json

@@ -816,7 +816,6 @@
     "no_answer": "No answer",
     "no_answer": "No answer",
     "settings": "Questionnaire settings",
     "settings": "Questionnaire settings",
     "failed_to_send": "Failed to send feedback",
     "failed_to_send": "Failed to send feedback",
-    "failed_to_get_user_info": "Feedback couldn't be sent because user info couldn't be achieved",
     "failed_to_update_answer_status": "Failed to update questionnaire answer status",
     "failed_to_update_answer_status": "Failed to update questionnaire answer status",
     "skipped": "The questionnaire was skipped and won't be shown again"
     "skipped": "The questionnaire was skipped and won't be shown again"
   },
   },

+ 0 - 1
packages/app/public/static/locales/ja_JP/translation.json

@@ -816,7 +816,6 @@
     "no_answer": "無回答",
     "no_answer": "無回答",
     "settings": "アンケート設定",
     "settings": "アンケート設定",
     "failed_to_send": "回答送信に失敗しました",
     "failed_to_send": "回答送信に失敗しました",
-    "failed_to_get_user_info": "ユーザ情報の取得に失敗したため、回答を送信できませんでした",
     "failed_to_update_answer_status": "アンケートの回答状態の更新に失敗しました",
     "failed_to_update_answer_status": "アンケートの回答状態の更新に失敗しました",
     "skipped": "このアンケートはスキップされたため、今後表示されません"
     "skipped": "このアンケートはスキップされたため、今後表示されません"
   },
   },

+ 16 - 26
packages/app/src/components/Questionnaire/QuestionnaireModal.tsx

@@ -61,15 +61,12 @@ const QuestionnaireModal = ({ questionnaireOrder, growiQuestionnaireServerOrigin
   }, [growiVersion]);
   }, [growiVersion]);
 
 
   // TODO: モック化されている箇所を実装
   // TODO: モック化されている箇所を実装
-  const getUserInfo = useCallback((): IUserInfo | null => {
-    if (currentUser) {
-      return {
-        userIdHash: '542bcc3bc5bc61b840017a18',
-        type: currentUser.admin ? 'admin' : 'general',
-        userCreatedAt: currentUser.createdAt,
-      };
-    }
-    return null;
+  const getUserInfo = useCallback((): IUserInfo => {
+    return {
+      userIdHash: '542bcc3bc5bc61b840017a18',
+      type: currentUser?.admin ? 'admin' : 'general',
+      userCreatedAt: currentUser?.createdAt || new Date(),
+    };
   }, [currentUser]);
   }, [currentUser]);
 
 
   const sendQuestionnaireAnswer = useCallback(async(questionnaireAnswer: IQuestionnaireAnswer) => {
   const sendQuestionnaireAnswer = useCallback(async(questionnaireAnswer: IQuestionnaireAnswer) => {
@@ -93,7 +90,6 @@ const QuestionnaireModal = ({ questionnaireOrder, growiQuestionnaireServerOrigin
 
 
     try {
     try {
       await apiv3Put('/questionnaire/answer', {
       await apiv3Put('/questionnaire/answer', {
-        user: currentUser?._id,
         questionnaireOrderId: questionnaireOrder._id,
         questionnaireOrderId: questionnaireOrder._id,
       });
       });
     }
     }
@@ -101,7 +97,7 @@ const QuestionnaireModal = ({ questionnaireOrder, growiQuestionnaireServerOrigin
       logger.error(e);
       logger.error(e);
       toastError(t('questionnaire.failed_to_update_answer_status'));
       toastError(t('questionnaire.failed_to_update_answer_status'));
     }
     }
-  }, [currentUser?._id, growiQuestionnaireServerOrigin, questionnaireOrder._id, t]);
+  }, [growiQuestionnaireServerOrigin, questionnaireOrder._id, t]);
 
 
   const submitHandler = useCallback((event) => {
   const submitHandler = useCallback((event) => {
     event.preventDefault();
     event.preventDefault();
@@ -113,27 +109,21 @@ const QuestionnaireModal = ({ questionnaireOrder, growiQuestionnaireServerOrigin
       return { question: question._id, value: answerValue };
       return { question: question._id, value: answerValue };
     });
     });
 
 
-    if (userInfo) {
-      const questionnaireAnswer: IQuestionnaireAnswer = {
-        growiInfo,
-        userInfo,
-        answers,
-        answeredAt: new Date(),
-      };
+    const questionnaireAnswer: IQuestionnaireAnswer = {
+      growiInfo,
+      userInfo,
+      answers,
+      answeredAt: new Date(),
+    };
 
 
-      sendQuestionnaireAnswer(questionnaireAnswer);
-    }
-    else {
-      toastError(t('questionnaire.failed_to_get_user_info'));
-    }
+    sendQuestionnaireAnswer(questionnaireAnswer);
 
 
     closeQuestionnaireModal();
     closeQuestionnaireModal();
-  }, [closeQuestionnaireModal, getGrowiInfo, getUserInfo, t, questionnaireOrder.questions, sendQuestionnaireAnswer]);
+  }, [closeQuestionnaireModal, getGrowiInfo, getUserInfo, questionnaireOrder.questions, sendQuestionnaireAnswer]);
 
 
   const skipBtnClickHandler = useCallback(async() => {
   const skipBtnClickHandler = useCallback(async() => {
     try {
     try {
       apiv3Put('/questionnaire/skip', {
       apiv3Put('/questionnaire/skip', {
-        user: currentUser?._id,
         questionnaireOrderId: questionnaireOrder._id,
         questionnaireOrderId: questionnaireOrder._id,
       });
       });
       toastSuccess(t('questionnaire.skipped'));
       toastSuccess(t('questionnaire.skipped'));
@@ -143,7 +133,7 @@ const QuestionnaireModal = ({ questionnaireOrder, growiQuestionnaireServerOrigin
       toastError(t('questionnaire.failed_to_update_answer_status'));
       toastError(t('questionnaire.failed_to_update_answer_status'));
     }
     }
     closeQuestionnaireModal();
     closeQuestionnaireModal();
-  }, [closeQuestionnaireModal, currentUser?._id, questionnaireOrder._id, t]);
+  }, [closeQuestionnaireModal, questionnaireOrder._id, t]);
 
 
   const questionnaireOrderTitle = lang === 'en_US' ? questionnaireOrder.title.en_US : questionnaireOrder.title.ja_JP;
   const questionnaireOrderTitle = lang === 'en_US' ? questionnaireOrder.title.en_US : questionnaireOrder.title.ja_JP;
 
 

+ 1 - 1
packages/app/src/server/middlewares/login-required.js

@@ -5,7 +5,7 @@ const logger = loggerFactory('growi:middleware:login-required');
 /**
 /**
  * require login handler
  * require login handler
  *
  *
- * @param {boolean} isGuestAllowed whethere guest user is allowed (default false)
+ * @param {boolean} isGuestAllowed whether guest user is allowed (default false)
  * @param {function} fallback fallback function which will be triggered when the check cannot be passed
  * @param {function} fallback fallback function which will be triggered when the check cannot be passed
  */
  */
 module.exports = (crowi, isGuestAllowed = false, fallback = null) => {
 module.exports = (crowi, isGuestAllowed = false, fallback = null) => {

+ 1 - 1
packages/app/src/server/routes/apiv3/index.js

@@ -108,7 +108,7 @@ module.exports = (crowi, app) => {
 
 
   router.use('/user-ui-settings', require('./user-ui-settings')(crowi));
   router.use('/user-ui-settings', require('./user-ui-settings')(crowi));
 
 
-  router.use('/questionnaire', require('./questionnaire')());
+  router.use('/questionnaire', require('./questionnaire')(crowi));
 
 
 
 
   return [router, routerForAdmin, routerForAuth];
   return [router, routerForAdmin, routerForAuth];

+ 9 - 10
packages/app/src/server/routes/apiv3/questionnaire.ts → packages/app/src/server/routes/apiv3/questionnaire.js

@@ -1,17 +1,15 @@
-import { Request, Router } from 'express';
+import { Router } from 'express';
 
 
 import { StatusType } from '~/interfaces/questionnaire/questionnaire-answer-status';
 import { StatusType } from '~/interfaces/questionnaire/questionnaire-answer-status';
 import QuestionnaireAnswerStatus from '~/server/models/questionnaire/questionnaire-answer-status';
 import QuestionnaireAnswerStatus from '~/server/models/questionnaire/questionnaire-answer-status';
 import QuestionnaireOrder from '~/server/models/questionnaire/questionnaire-order';
 import QuestionnaireOrder from '~/server/models/questionnaire/questionnaire-order';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
-import { ApiV3Response } from './interfaces/apiv3-response';
-
 const logger = loggerFactory('growi:routes:apiv3:questionnaire');
 const logger = loggerFactory('growi:routes:apiv3:questionnaire');
 
 
 const router = Router();
 const router = Router();
 
 
-const changeAnswerStatus = async(user, questionnaireOrderId, status: StatusType): Promise<number> => {
+const changeAnswerStatus = async(user, questionnaireOrderId, status) => {
   const result = await QuestionnaireAnswerStatus.updateOne({
   const result = await QuestionnaireAnswerStatus.updateOne({
     user,
     user,
     questionnaireOrderId,
     questionnaireOrderId,
@@ -28,9 +26,10 @@ const changeAnswerStatus = async(user, questionnaireOrderId, status: StatusType)
   return 404;
   return 404;
 };
 };
 
 
-module.exports = () => {
+module.exports = (crowi) => {
+  const loginRequired = require('../../middlewares/login-required')(crowi, true);
 
 
-  router.get('/orders', async(req: Request, res: ApiV3Response) => {
+  router.get('/orders', async(req, res) => {
     const currentDate = new Date();
     const currentDate = new Date();
     try {
     try {
       const questionnaireOrders = await QuestionnaireOrder.find({
       const questionnaireOrders = await QuestionnaireOrder.find({
@@ -47,9 +46,9 @@ module.exports = () => {
     }
     }
   });
   });
 
 
-  router.put('/answer', async(req: Request, res: ApiV3Response) => {
+  router.put('/answer', loginRequired, async(req, res) => {
     try {
     try {
-      const status = await changeAnswerStatus(req.body.user, req.body.questionnaireOrderId, StatusType.answered);
+      const status = await changeAnswerStatus(req.user, req.body.questionnaireOrderId, StatusType.answered);
       return res.apiv3({}, status);
       return res.apiv3({}, status);
     }
     }
     catch (err) {
     catch (err) {
@@ -58,9 +57,9 @@ module.exports = () => {
     }
     }
   });
   });
 
 
-  router.put('/skip', async(req: Request, res: ApiV3Response) => {
+  router.put('/skip', loginRequired, async(req, res) => {
     try {
     try {
-      const status = await changeAnswerStatus(req.body.user, req.body.questionnaireOrderId, StatusType.skipped);
+      const status = await changeAnswerStatus(req.user, req.body.questionnaireOrderId, StatusType.skipped);
       return res.apiv3({}, status);
       return res.apiv3({}, status);
     }
     }
     catch (err) {
     catch (err) {