|
@@ -1,4 +1,3 @@
|
|
|
-import { IQuestionnaireOrder } from '~/interfaces/questionnaire/questionnaire-order';
|
|
|
|
|
import axios from '~/utils/axios';
|
|
import axios from '~/utils/axios';
|
|
|
|
|
|
|
|
import QuestionnaireOrder, { QuestionnaireOrderDocument } from '../models/questionnaire/questionnaire-order';
|
|
import QuestionnaireOrder, { QuestionnaireOrderDocument } from '../models/questionnaire/questionnaire-order';
|
|
@@ -21,54 +20,68 @@ class QuestionnaireCronService {
|
|
|
|
|
|
|
|
maxHoursUntilRequest: number;
|
|
maxHoursUntilRequest: number;
|
|
|
|
|
|
|
|
|
|
+ cronJob;
|
|
|
|
|
+
|
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
|
constructor(crowi) {
|
|
constructor(crowi) {
|
|
|
this.growiQuestionnaireUri = crowi.configManager?.getConfig('crowi', 'app:growiQuestionnaireUri');
|
|
this.growiQuestionnaireUri = crowi.configManager?.getConfig('crowi', 'app:growiQuestionnaireUri');
|
|
|
this.cronSchedule = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronSchedule');
|
|
this.cronSchedule = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronSchedule');
|
|
|
this.maxHoursUntilRequest = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronMaxHoursUntilRequest');
|
|
this.maxHoursUntilRequest = crowi.configManager?.getConfig('crowi', 'app:questionnaireCronMaxHoursUntilRequest');
|
|
|
|
|
+
|
|
|
|
|
+ const maxSecondsUntilRequest = this.maxHoursUntilRequest * 60 * 60;
|
|
|
|
|
+
|
|
|
|
|
+ this.cronJob = this.questionnaireOrderGetCron(this.cronSchedule, maxSecondsUntilRequest);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- setUpCron(): void {
|
|
|
|
|
- // const maxSecondsUntilRequest = this.maxHoursUntilRequest * 60 * 60;
|
|
|
|
|
- const maxSecondsUntilRequest = 60;
|
|
|
|
|
- this.questionnaireOrderGetCron(this.cronSchedule, maxSecondsUntilRequest);
|
|
|
|
|
|
|
+ startCron(): void {
|
|
|
|
|
+ this.cronJob.start();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- questionnaireOrderGetCron(cronSchedule: string, maxSecondsUntilRequest: number): void {
|
|
|
|
|
|
|
+ stopCron(): void {
|
|
|
|
|
+ this.cronJob.stop();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private questionnaireOrderGetCron(cronSchedule: string, maxSecondsUntilRequest: number) {
|
|
|
const saveOrders = async(questionnaireOrders: QuestionnaireOrderDocument[]) => {
|
|
const saveOrders = async(questionnaireOrders: QuestionnaireOrderDocument[]) => {
|
|
|
|
|
+ console.log('こんにちは');
|
|
|
const savedOrders: QuestionnaireOrderDocument[] = await QuestionnaireOrder.find();
|
|
const savedOrders: QuestionnaireOrderDocument[] = await QuestionnaireOrder.find();
|
|
|
|
|
+ console.log(savedOrders);
|
|
|
const savedOrderIds = savedOrders.map(order => order._id.toString());
|
|
const savedOrderIds = savedOrders.map(order => order._id.toString());
|
|
|
// 渡されたアンケートのうち未保存のものを保存する
|
|
// 渡されたアンケートのうち未保存のものを保存する
|
|
|
const nonSavedOrders = questionnaireOrders.filter(order => !savedOrderIds.includes(order._id));
|
|
const nonSavedOrders = questionnaireOrders.filter(order => !savedOrderIds.includes(order._id));
|
|
|
QuestionnaireOrder.insertMany(nonSavedOrders);
|
|
QuestionnaireOrder.insertMany(nonSavedOrders);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- const deleteFinishedOrders = () => {
|
|
|
|
|
|
|
+ const deleteFinishedOrders = async() => {
|
|
|
const currentDate = new Date(Date.now());
|
|
const currentDate = new Date(Date.now());
|
|
|
- QuestionnaireOrder.deleteMany({
|
|
|
|
|
|
|
+ await QuestionnaireOrder.deleteMany({
|
|
|
showUntil: {
|
|
showUntil: {
|
|
|
$lt: currentDate,
|
|
$lt: currentDate,
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- nodeCron.schedule(cronSchedule, async() => {
|
|
|
|
|
|
|
+ return nodeCron.schedule(cronSchedule, async() => {
|
|
|
|
|
+ console.log('called');
|
|
|
const secToSleep = getRandomInt(0, maxSecondsUntilRequest);
|
|
const secToSleep = getRandomInt(0, maxSecondsUntilRequest);
|
|
|
|
|
|
|
|
await sleep(secToSleep * 1000);
|
|
await sleep(secToSleep * 1000);
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
const response = await axios.get(`${this.growiQuestionnaireUri}/questionnaire-order/index`);
|
|
const response = await axios.get(`${this.growiQuestionnaireUri}/questionnaire-order/index`);
|
|
|
|
|
+ console.log(response.data);
|
|
|
const questionnaireOrders: QuestionnaireOrderDocument[] = JSON.parse(JSON.stringify(response.data)).questionnaireQrders;
|
|
const questionnaireOrders: QuestionnaireOrderDocument[] = JSON.parse(JSON.stringify(response.data)).questionnaireQrders;
|
|
|
|
|
|
|
|
await saveOrders(questionnaireOrders);
|
|
await saveOrders(questionnaireOrders);
|
|
|
- deleteFinishedOrders();
|
|
|
|
|
|
|
+ await deleteFinishedOrders();
|
|
|
|
|
+
|
|
|
|
|
+ console.log('executed');
|
|
|
}
|
|
}
|
|
|
catch (e) {
|
|
catch (e) {
|
|
|
console.log(e);
|
|
console.log(e);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- }).start();
|
|
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|