fix: fix bugs and structure
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { Question } from '@/modules/questions/entities/question.entity';
|
||||
import { AnswerSubmissionDTO } from '../dtos/answer-submission.dto';
|
||||
import { QuestionTransitionType } from '@/modules/questions/enums/question-transition-type.enum';
|
||||
import { QuestionType } from '@/modules/questions/enums/question-type.enum';
|
||||
import { SingleChoiceCondition } from '@/modules/questions/interfaces/single-choice-condition.interface';
|
||||
import { NumericCondition } from '@/modules/questions/interfaces/numeric-condition.interface';
|
||||
import { AppException } from '@/common/exceptions/app.exception';
|
||||
import { HttpStatus } from '@nestjs/common';
|
||||
|
||||
export const getNextTransition = (
|
||||
question: Question,
|
||||
answerSubmissionDto: AnswerSubmissionDTO,
|
||||
) => {
|
||||
const transitions = question.outgoingTransitions ?? [];
|
||||
|
||||
const endTransition = transitions.find(
|
||||
(t) => t.type === QuestionTransitionType.END,
|
||||
);
|
||||
|
||||
if (
|
||||
question.type === QuestionType.MULTI_CHOICE &&
|
||||
answerSubmissionDto.choiceId !== undefined
|
||||
) {
|
||||
const transition = transitions.find(
|
||||
(t) =>
|
||||
t.type === QuestionTransitionType.CHOICE &&
|
||||
(t.condition as SingleChoiceCondition).choiceId ===
|
||||
answerSubmissionDto.choiceId,
|
||||
);
|
||||
|
||||
if (transition) return transition;
|
||||
}
|
||||
|
||||
if (
|
||||
question.type === QuestionType.NUMERIC &&
|
||||
answerSubmissionDto.numericValue !== undefined
|
||||
) {
|
||||
const value = answerSubmissionDto.numericValue;
|
||||
|
||||
const transition = transitions.find((t) => {
|
||||
if (t.type !== QuestionTransitionType.NUMBER_RANGE) return false;
|
||||
|
||||
const condition = t.condition as NumericCondition;
|
||||
|
||||
return value >= condition.min && value <= condition.max;
|
||||
});
|
||||
|
||||
if (transition) return transition;
|
||||
}
|
||||
|
||||
const defaultTransition = transitions.find(
|
||||
(t) => t.type === QuestionTransitionType.DEFAULT,
|
||||
);
|
||||
|
||||
if (defaultTransition) return defaultTransition;
|
||||
|
||||
if (endTransition) return endTransition;
|
||||
|
||||
throw new AppException(
|
||||
'submissions.errors.nextQuestionNotFound',
|
||||
HttpStatus.BAD_REQUEST,
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user