2024-06-29 09:32:16 +00:00
|
|
|
import { sendAnswer } from "@/api/quizRelase";
|
|
|
|
import { RealTypedQuizQuestion } from "@/model/questionTypes/shared";
|
2024-09-12 08:43:50 +00:00
|
|
|
import { OwnVariant, QuestionAnswer, createQuizViewStore } from "@/stores/quizView";
|
2024-06-29 09:32:16 +00:00
|
|
|
import moment from "moment";
|
|
|
|
import { notReachable } from "./notReachable";
|
|
|
|
|
2024-07-05 17:05:26 +00:00
|
|
|
export function sendQuestionAnswer(
|
|
|
|
quizId: string,
|
|
|
|
question: RealTypedQuizQuestion,
|
2024-09-12 08:43:50 +00:00
|
|
|
questionAnswer: QuestionAnswer | undefined,
|
|
|
|
ownVariants: OwnVariant[]
|
2024-07-05 17:05:26 +00:00
|
|
|
) {
|
|
|
|
if (!questionAnswer) {
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: "",
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
2024-06-29 09:32:16 +00:00
|
|
|
switch (question.type) {
|
|
|
|
case "date": {
|
|
|
|
if (!moment.isMoment(questionAnswer.answer)) throw new Error("Cannot send answer in date question");
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: moment(questionAnswer.answer).format("YYYY.MM.DD"),
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "emoji": {
|
2024-09-12 15:55:25 +00:00
|
|
|
if (question.content.multi) {
|
|
|
|
const answer = questionAnswer.answer;
|
|
|
|
const ownVariant = Array.isArray(answer)
|
|
|
|
? ownVariants[ownVariants.findIndex((variant) => answer.some((a: string) => a === variant.id))]?.variant || ""
|
|
|
|
: ownVariants[ownVariants.findIndex((variant) => variant.id === questionAnswer.answer)]?.variant || "";
|
|
|
|
|
|
|
|
if (moment.isMoment(answer)) throw new Error("Answer is Moment in Variant question");
|
|
|
|
|
|
|
|
//Оставляем только выбранные варианты
|
|
|
|
const selectedVariants = question.content.variants.filter((v) => answer.includes(v.id));
|
|
|
|
|
|
|
|
let answerString = ``;
|
|
|
|
selectedVariants.forEach((e) => {
|
|
|
|
if (e.isOwn) {
|
|
|
|
if (question.content.own && selectedVariants.some((v) => v.isOwn)) {
|
|
|
|
answerString += `\`${e.extendedText} ${ownVariant?.answer ?? ""}\`,`;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
answerString += `\`${e.extendedText} ${e.answer ?? ""}\`,`;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
answerString = answerString.slice(0, -1);
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: answerString,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2024-06-29 09:32:16 +00:00
|
|
|
const variant = question.content.variants.find((v) => v.id === questionAnswer.answer);
|
|
|
|
if (!variant) throw new Error(`Cannot find variant with id ${questionAnswer.answer} in question ${question.id}`);
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: variant.extendedText + " " + variant.answer,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "file": {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
case "images": {
|
2024-09-12 08:43:50 +00:00
|
|
|
if (question.content.multi) {
|
|
|
|
const answer = questionAnswer.answer;
|
2024-09-12 15:55:25 +00:00
|
|
|
const ownAnswer = Array.isArray(answer)
|
|
|
|
? ownVariants[ownVariants.findIndex((variant) => answer.some((a: string) => a === variant.id))]?.variant
|
|
|
|
?.answer || ""
|
|
|
|
: ownVariants[ownVariants.findIndex((variant) => variant.id === questionAnswer.answer)]?.variant?.answer ||
|
|
|
|
"";
|
|
|
|
|
|
|
|
if (moment.isMoment(answer)) throw new Error("Answer is Moment in Variant question");
|
2024-09-12 08:43:50 +00:00
|
|
|
|
|
|
|
//Оставляем только выбранные варианты
|
|
|
|
const selectedVariants = question.content.variants.filter((v) => answer.includes(v.id));
|
|
|
|
|
|
|
|
let answerString = ``;
|
2024-09-12 15:55:25 +00:00
|
|
|
selectedVariants.forEach((e) => {
|
2024-09-15 17:00:06 +00:00
|
|
|
if (!e.isOwn || (e.isOwn && question.content.own)) {
|
|
|
|
console.log(e.answer);
|
|
|
|
console.log(e.answer);
|
|
|
|
console.log(ownAnswer);
|
|
|
|
const body = {
|
|
|
|
Image: e.extendedText,
|
|
|
|
Description: e.isOwn ? ownAnswer : e.answer,
|
|
|
|
};
|
|
|
|
answerString += `\`${JSON.stringify(body)}\`,`;
|
|
|
|
}
|
2024-09-12 08:43:50 +00:00
|
|
|
});
|
|
|
|
answerString = answerString.slice(0, -1);
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: answerString,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2024-06-29 09:32:16 +00:00
|
|
|
const variant = question.content.variants.find((v) => v.id === questionAnswer.answer);
|
2024-09-12 08:43:50 +00:00
|
|
|
|
2024-06-29 09:32:16 +00:00
|
|
|
if (!variant) throw new Error(`Cannot find variant with id ${questionAnswer.answer} in question ${question.id}`);
|
2024-07-11 19:26:46 +00:00
|
|
|
const body = {
|
|
|
|
Image: variant.extendedText,
|
|
|
|
Description: variant.answer,
|
|
|
|
};
|
2024-07-05 16:59:20 +00:00
|
|
|
if (!body) throw new Error(`Body of answer in question ${question.id} is undefined`);
|
2024-06-29 09:32:16 +00:00
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
2024-07-11 19:26:46 +00:00
|
|
|
body: JSON.stringify(body),
|
2024-06-29 09:32:16 +00:00
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "number": {
|
|
|
|
if (typeof questionAnswer.answer !== "string") throw new Error("Cannot send answer in select question");
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: questionAnswer.answer,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "page": {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
case "rating": {
|
|
|
|
if (typeof questionAnswer.answer !== "string") throw new Error("Cannot send answer in select question");
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: String(questionAnswer.answer) + " из " + question.content.steps,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "select": {
|
|
|
|
if (typeof questionAnswer.answer !== "string") throw new Error("Cannot send answer in select question");
|
|
|
|
|
|
|
|
const variant = question.content.variants[Number(questionAnswer.answer)];
|
|
|
|
if (!variant) throw new Error(`Cannot find variant with id ${questionAnswer.answer} in question ${question.id}`);
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: variant.answer,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "text": {
|
|
|
|
if (moment.isMoment(questionAnswer.answer)) throw new Error("Cannot send Moment in text question");
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: questionAnswer.answer,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "variant": {
|
|
|
|
if (question.content.multi) {
|
|
|
|
const answer = questionAnswer.answer;
|
2024-09-12 11:14:54 +00:00
|
|
|
if (moment.isMoment(answer)) throw new Error("Answer is Moment in Variant question");
|
|
|
|
|
|
|
|
const ownAnswer = Array.isArray(answer)
|
|
|
|
? ownVariants[ownVariants.findIndex((variant) => answer.some((a: string) => a === variant.id))]?.variant
|
|
|
|
?.answer || ""
|
|
|
|
: ownVariants[ownVariants.findIndex((variant) => variant.id === questionAnswer.answer)]?.variant?.answer ||
|
|
|
|
"";
|
|
|
|
|
2024-09-08 08:31:11 +00:00
|
|
|
//Оставляем только выбранные варианты
|
2024-06-29 09:32:16 +00:00
|
|
|
const selectedVariants = question.content.variants.filter((v) => answer.includes(v.id));
|
2024-09-12 08:43:50 +00:00
|
|
|
|
2024-09-08 08:31:11 +00:00
|
|
|
let answerString = ``;
|
|
|
|
selectedVariants.forEach((e) => {
|
2024-09-12 11:14:54 +00:00
|
|
|
if (!e.isOwn) answerString += `\`${e.answer}\`,`;
|
2024-09-08 08:31:11 +00:00
|
|
|
});
|
2024-09-12 11:14:54 +00:00
|
|
|
|
|
|
|
if (question.content.own && selectedVariants.some((v) => v.isOwn)) {
|
|
|
|
answerString += `\`${ownAnswer}\`,`;
|
|
|
|
}
|
2024-09-08 08:31:11 +00:00
|
|
|
answerString = answerString.slice(0, -1);
|
2024-06-29 09:32:16 +00:00
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
2024-09-08 08:31:11 +00:00
|
|
|
body: answerString,
|
2024-06-29 09:32:16 +00:00
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const variant = question.content.variants.find((v) => v.id === questionAnswer.answer);
|
|
|
|
if (!variant) throw new Error(`Cannot find variant with id ${questionAnswer.answer} in question ${question.id}`);
|
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
|
|
|
body: variant.answer,
|
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
case "varimg": {
|
|
|
|
const variant = question.content.variants.find((v) => v.id === questionAnswer.answer);
|
2024-09-12 08:43:50 +00:00
|
|
|
const ownAnswer =
|
2024-09-12 11:14:54 +00:00
|
|
|
ownVariants[ownVariants.findIndex((variant) => variant.id === questionAnswer.answer)]?.variant?.answer || "";
|
2024-09-12 08:43:50 +00:00
|
|
|
|
2024-06-29 09:32:16 +00:00
|
|
|
if (!variant) throw new Error(`Cannot find variant with id ${questionAnswer.answer} in question ${question.id}`);
|
2024-07-11 19:26:46 +00:00
|
|
|
const body = {
|
|
|
|
Image: variant.extendedText,
|
2024-09-12 08:43:50 +00:00
|
|
|
Description: question.content.own ? ownAnswer : variant.answer,
|
2024-07-11 19:26:46 +00:00
|
|
|
};
|
2024-07-05 16:59:20 +00:00
|
|
|
if (!body) throw new Error(`Body of answer in question ${question.id} is undefined`);
|
2024-06-29 09:32:16 +00:00
|
|
|
|
|
|
|
return sendAnswer({
|
|
|
|
questionId: question.id,
|
2024-09-15 17:00:06 +00:00
|
|
|
body: `\`${JSON.stringify(body)}\``,
|
2024-06-29 09:32:16 +00:00
|
|
|
qid: quizId,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
notReachable(question);
|
|
|
|
}
|
|
|
|
}
|