Skip to content

Commit

Permalink
tech(api): use service in save-and-correct-answer-for-competence-eval…
Browse files Browse the repository at this point in the history
…uation
  • Loading branch information
laura-bergoens committed Mar 6, 2025
1 parent 3fdbe69 commit 2adf481
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 250 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,40 +43,28 @@ export async function saveAndCorrectAnswerForCompetenceEvaluation({
const lastQuestionDate = assessment.lastQuestionDate || now;
correctedAnswer.setTimeSpentFrom({ now, lastQuestionDate });

let scorecardBeforeAnswer = null;
if (correctedAnswer.result.isOK()) {
scorecardBeforeAnswer = await scorecardService.computeScorecard({
userId,
competenceId: challenge.competenceId,
areaRepository,
competenceRepository,
competenceEvaluationRepository,
knowledgeElementRepository,
locale,
});
}

const targetSkills = await skillRepository.findActiveByCompetenceId(assessment.competenceId);
const knowledgeElementsFromAnswer = await computeKnowledgeElements({
const knowledgeElementsBefore = await knowledgeElementRepository.findUniqByUserId({ userId });
const knowledgeElementsToAdd = computeKnowledgeElements({
assessment,
answer: correctedAnswer,
challenge,
targetSkills,
knowledgeElementRepository,
knowledgeElementsBefore,
});

const answerSaved = await answerRepository.saveWithKnowledgeElements(correctedAnswer, knowledgeElementsFromAnswer);
const answerSaved = await answerRepository.saveWithKnowledgeElements(correctedAnswer, knowledgeElementsToAdd);
answerSaved.levelup = await computeLevelUpInformation({
answerSaved,
scorecardService,
userId,
competenceId: challenge.competenceId,
locale,
knowledgeElementsBefore,
knowledgeElementsAdded: knowledgeElementsToAdd,
scorecardService,
areaRepository,
competenceRepository,
competenceEvaluationRepository,
knowledgeElementRepository,
scorecardBeforeAnswer,
locale,
});

if (userId) {
Expand All @@ -86,11 +74,10 @@ export async function saveAndCorrectAnswerForCompetenceEvaluation({
return answerSaved;
}

async function computeKnowledgeElements({ assessment, answer, challenge, targetSkills, knowledgeElementRepository }) {
const knowledgeElements = await knowledgeElementRepository.findUniqByUserIdAndAssessmentId({
userId: assessment.userId,
assessmentId: assessment.id,
});
function computeKnowledgeElements({ assessment, answer, challenge, targetSkills, knowledgeElementsBefore }) {
const knowledgeElements = knowledgeElementsBefore.filter(
(knowledgeElement) => knowledgeElement.assessmentId === assessment.id,
);
return KnowledgeElement.createKnowledgeElementsForAnswer({
answer,
challenge,
Expand Down Expand Up @@ -118,36 +105,39 @@ function getSkillsFilteredByStatus(knowledgeElements, targetSkills, status) {

async function computeLevelUpInformation({
answerSaved,
scorecardService,
userId,
competenceId,
competenceRepository,
locale,
knowledgeElementsBefore,
knowledgeElementsAdded,
scorecardService,
areaRepository,
competenceRepository,
competenceEvaluationRepository,
knowledgeElementRepository,
scorecardBeforeAnswer,
locale,
}) {
if (!scorecardBeforeAnswer) {
if (!answerSaved.result.isOK()) {
return {};
}

const scorecardAfterAnswer = await scorecardService.computeScorecard({
const competence = await competenceRepository.get({ id: competenceId, locale });
const area = await areaRepository.get({ id: competence.areaId, locale });
const competenceEvaluations = await competenceEvaluationRepository.findByUserId(userId);
const competenceEvaluationForCompetence = competenceEvaluations.find(
(competenceEval) => competenceEval.competenceId === competenceId,
);
const knowledgeElementsForCompetenceBefore = knowledgeElementsBefore.filter(
(knowledgeElement) => knowledgeElement.competenceId === competenceId,
);
const knowledgeElementsForCompetenceAfter = [
...knowledgeElementsAdded.filter((knowledgeElement) => knowledgeElement.competenceId === competenceId),
...knowledgeElementsForCompetenceBefore,
];
return scorecardService.computeLevelUpInformation({
answer: answerSaved,
userId,
competenceId,
competenceRepository,
areaRepository,
competenceEvaluationRepository,
knowledgeElementRepository,
locale,
area,
competence,
competenceEvaluationForCompetence,
knowledgeElementsForCompetenceBefore,
knowledgeElementsForCompetenceAfter,
});

if (scorecardBeforeAnswer.level < scorecardAfterAnswer.level) {
return {
id: answerSaved.id,
competenceName: scorecardAfterAnswer.name,
level: scorecardAfterAnswer.level,
};
}
return {};
}
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ describe('Unit | Evaluation | Domain | Use Cases | save-and-correct-answer-for-c
savedAnswer.result = AnswerStatus.KO;

// when
await saveAndCorrectAnswerForCampaign({
const result = await saveAndCorrectAnswerForCampaign({
answer,
userId,
assessment,
Expand All @@ -379,6 +379,7 @@ describe('Unit | Evaluation | Domain | Use Cases | save-and-correct-answer-for-c

// then
expect(scorecardService.computeLevelUpInformation).to.not.have.been.called;
expect(result.levelup).to.deep.equal({});
});
});
});
Expand Down
Loading

0 comments on commit 2adf481

Please sign in to comment.