diff --git a/src/app/question/types/QuestionContentData.ts b/src/app/question/types/QuestionContentData.ts index 30450f6..52b02e8 100644 --- a/src/app/question/types/QuestionContentData.ts +++ b/src/app/question/types/QuestionContentData.ts @@ -1,6 +1,6 @@ export interface QuestionType { id: number; - text: string; - weight: string[]; - inverseWeight: string[]; + question: string; + weights: string[]; + inverseWeights: string[]; } diff --git a/src/app/question/utils/calculateResult.ts b/src/app/question/utils/calculateResult.ts new file mode 100644 index 0000000..cb574b3 --- /dev/null +++ b/src/app/question/utils/calculateResult.ts @@ -0,0 +1,55 @@ +import { QuestionType } from '../types/QuestionContentData'; + +type Answers = Record; +interface TypeScore { + sum: number; + count: number; +}; + +export function calculateResult( + questions: QuestionType[], + answers: Answers, +): Record { + + const resultTypes: Record = { + 야생형: { sum: 0, count: 0 }, + 교과서형: { sum: 0, count: 0 }, + 지피티형: { sum: 0, count: 0 }, + 문제집형: { sum: 0, count: 0 }, + 메뚜기형: { sum: 0, count: 0 }, + }; + + + for (const q of questions) { + const answerValue = answers[q.id]; + + if (answerValue === undefined) continue; + + q.weights.forEach((type) => { + if (resultTypes[type]) { + resultTypes[type].sum += answerValue; + resultTypes[type].count += 1; + } else { + console.warn(`weight - 없는 타입입니다! : ${type}`); + } + }); + + q.inverseWeights.forEach((type) => { + const inverseValue = 6 - answerValue; + if (resultTypes[type]) { + resultTypes[type].sum += inverseValue; + resultTypes[type].count += 1; + } else { + console.warn(`inverseWeight - 없는 타입입니다! : ${type}`); + } + }); + } + + const result: Record = {}; + + Object.entries(resultTypes).forEach(([type, { sum, count }]) => { + result[type] = count > 0 ? Math.round((sum / count) * 100) / 100 : 0; + }); + + return result; +}