Skip to content

Commit

Permalink
[TECH] Utiliser la date de reconciliation dans le scoring (PIX-14540).
Browse files Browse the repository at this point in the history
  • Loading branch information
pix-service-auto-merge authored Oct 24, 2024
2 parents 4bc4441 + 8d9e3b2 commit 3c31d5e
Show file tree
Hide file tree
Showing 41 changed files with 4,267 additions and 4,524 deletions.
57 changes: 7 additions & 50 deletions api/lib/domain/events/handle-certification-rescoring.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,9 @@ async function handleCertificationRescoring({
event,
assessmentResultRepository,
certificationAssessmentRepository,
competenceMarkRepository,
scoringCertificationService,
certificationEvaluationServices,
certificationCourseRepository,
certificationChallengeForScoringRepository,
answerRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringDegradationService,
certificationAssessmentHistoryRepository,
scoringConfigurationRepository,
challengeRepository,
}) {
checkEventTypes(event, eventTypes);

Expand All @@ -49,18 +41,8 @@ async function handleCertificationRescoring({
certificationAssessment,
event,
locale: event.locale,
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationChallengeForScoringRepository,
certificationCourseRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringDegradationService,
scoringConfigurationRepository,
scoringCertificationService,
challengeRepository,
certificationEvaluationServices,
});
}

Expand All @@ -69,8 +51,8 @@ async function handleCertificationRescoring({
certificationAssessment,
event,
assessmentResultRepository,
competenceMarkRepository,
certificationCourseRepository,
certificationEvaluationServices,
});
}

Expand All @@ -79,21 +61,17 @@ async function _handleV2CertificationScoring({
certificationAssessment,
assessmentResultRepository,
certificationCourseRepository,
competenceMarkRepository,
scoringCertificationService,
certificationEvaluationServices,
}) {
const emitter = _getEmitterFromEvent(event);

try {
const { certificationCourse, certificationAssessmentScore } =
await scoringCertificationService.handleV2CertificationScoring({
await certificationEvaluationServices.handleV2CertificationScoring({
event,
emitter,
certificationAssessment,
assessmentResultRepository,
certificationCourseRepository,
competenceMarkRepository,
scoringCertificationService,
});

await _cancelCertificationCourseIfNotTrustableOrLackOfAnswersForTechnicalReason({
Expand Down Expand Up @@ -129,36 +107,15 @@ async function _handleV3CertificationScoring({
certificationAssessment,
event,
locale,
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationChallengeForScoringRepository,
certificationCourseRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringConfigurationRepository,
scoringCertificationService,
scoringDegradationService,
challengeRepository,
certificationEvaluationServices,
}) {
const emitter = _getEmitterFromEvent(event);
const certificationCourse = await scoringCertificationService.handleV3CertificationScoring({
const certificationCourse = await certificationEvaluationServices.handleV3CertificationScoring({
event,
emitter,
certificationAssessment,
locale,
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationChallengeForScoringRepository,
certificationCourseRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringDegradationService,
scoringConfigurationRepository,
challengeRepository,
});

if (certificationCourse.isCancelled()) {
Expand Down
10 changes: 4 additions & 6 deletions api/lib/domain/events/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@ import perf_hooks from 'node:perf_hooks';

import _ from 'lodash';

import { services as certificationEvaluationServices } from '../../../src/certification/evaluation/domain/services/index.js';
import * as certificationAssessmentHistoryRepository from '../../../src/certification/evaluation/infrastructure/repositories/certification-assessment-history-repository.js';
import * as certificationChallengeForScoringRepository from '../../../src/certification/evaluation/infrastructure/repositories/certification-challenge-for-scoring-repository.js';
import * as flashAlgorithmService from '../../../src/certification/flash-certification/domain/services/algorithm-methods/flash.js';
import { scoringDegradationService } from '../../../src/certification/scoring/domain/services/scoring-degradation-service.js';
import * as certificationAssessmentHistoryRepository from '../../../src/certification/scoring/infrastructure/repositories/certification-assessment-history-repository.js';
import * as certificationChallengeForScoringRepository from '../../../src/certification/scoring/infrastructure/repositories/certification-challenge-for-scoring-repository.js';
import * as scoringConfigurationRepository from '../../../src/certification/scoring/infrastructure/repositories/scoring-configuration-repository.js';
import * as finalizedSessionRepository from '../../../src/certification/session-management/infrastructure/repositories/finalized-session-repository.js';
import * as juryCertificationSummaryRepository from '../../../src/certification/session-management/infrastructure/repositories/jury-certification-summary-repository.js';
import * as supervisorAccessRepository from '../../../src/certification/session-management/infrastructure/repositories/supervisor-access-repository.js';
Expand Down Expand Up @@ -91,12 +90,11 @@ const dependencies = {
poleEmploiNotifier: requirePoleEmploiNotifier(),
poleEmploiSendingRepository,
scoringCertificationService,
scoringDegradationService,
skillRepository,
scoringConfigurationRepository,
supervisorAccessRepository,
targetProfileRepository,
userRepository,
certificationEvaluationServices,
};

const handlersToBeInjected = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,13 @@ import { JobController } from '../../../../shared/application/jobs/job-controlle
import { V3_REPRODUCIBILITY_RATE } from '../../../../shared/domain/constants.js';
import { CertificationComputeError } from '../../../../shared/domain/errors.js';
import { AssessmentResult } from '../../../../shared/domain/models/index.js';
import * as answerRepository from '../../../../shared/infrastructure/repositories/answer-repository.js';
import * as challengeRepository from '../../../../shared/infrastructure/repositories/challenge-repository.js';
import * as flashAlgorithmService from '../../../flash-certification/domain/services/algorithm-methods/flash.js';
import { AssessmentResultFactory } from '../../../scoring/domain/models/factories/AssessmentResultFactory.js';
import { assessmentResultRepository } from '../../../session-management/infrastructure/repositories/index.js';
import { AlgorithmEngineVersion } from '../../../shared/domain/models/AlgorithmEngineVersion.js';
import * as scoringCertificationService from '../../../shared/domain/services/scoring-certification-service.js';
import * as certificationAssessmentRepository from '../../../shared/infrastructure/repositories/certification-assessment-repository.js';
import * as certificationCourseRepository from '../../../shared/infrastructure/repositories/certification-course-repository.js';
import * as competenceMarkRepository from '../../../shared/infrastructure/repositories/competence-mark-repository.js';
import * as flashAlgorithmConfigurationRepository from '../../../shared/infrastructure/repositories/flash-algorithm-configuration-repository.js';
import { AssessmentResultFactory } from '../../domain/models/factories/AssessmentResultFactory.js';
import { scoringDegradationService } from '../../domain/services/scoring-degradation-service.js';
import * as certificationAssessmentHistoryRepository from '../../infrastructure/repositories/certification-assessment-history-repository.js';
import * as certificationChallengeForScoringRepository from '../../infrastructure/repositories/certification-challenge-for-scoring-repository.js';
import * as scoringConfigurationRepository from '../../infrastructure/repositories/scoring-configuration-repository.js';
import { services } from '../../domain/services/index.js';

export class CertificationCompletedJobController extends JobController {
constructor() {
Expand All @@ -29,38 +21,22 @@ export class CertificationCompletedJobController extends JobController {
async handle({
data,
dependencies = {
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationAssessmentRepository,
certificationCourseRepository,
certificationChallengeForScoringRepository,
challengeRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringCertificationService,
scoringConfigurationRepository,
scoringDegradationService,
services,
events,
},
}) {
const { assessmentId, locale } = data;

const {
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationAssessmentRepository,
certificationCourseRepository,
certificationChallengeForScoringRepository,
competenceMarkRepository,
scoringConfigurationRepository,
scoringCertificationService,
answerRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringDegradationService,
challengeRepository,
services,
events,
} = dependencies;

Expand All @@ -71,26 +47,16 @@ export class CertificationCompletedJobController extends JobController {
certificationScoringCompletedEvent = await _handleV3CertificationScoring({
certificationAssessment,
locale,
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationChallengeForScoringRepository,
certificationCourseRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringConfigurationRepository,
scoringCertificationService,
scoringDegradationService,
challengeRepository,
services,
});
} else {
certificationScoringCompletedEvent = await _handleV2CertificationScoring({
certificationAssessment,
assessmentResultRepository,
certificationCourseRepository,
competenceMarkRepository,
scoringCertificationService,
services,
});
}

Expand All @@ -104,21 +70,16 @@ async function _handleV2CertificationScoring({
certificationAssessment,
assessmentResultRepository,
certificationCourseRepository,
competenceMarkRepository,
scoringCertificationService,
services,
}) {
const emitter = AssessmentResult.emitters.PIX_ALGO;

try {
const { certificationCourse, certificationAssessmentScore } =
await scoringCertificationService.handleV2CertificationScoring({
emitter,
certificationAssessment,
assessmentResultRepository,
certificationCourseRepository,
competenceMarkRepository,
scoringCertificationService,
});
const { certificationCourse, certificationAssessmentScore } = await services.handleV2CertificationScoring({
emitter,
certificationAssessment,
});

certificationCourse.complete({ now: new Date() });

Expand Down Expand Up @@ -155,35 +116,14 @@ async function _handleV2CertificationScoring({
async function _handleV3CertificationScoring({
certificationAssessment,
locale,
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationChallengeForScoringRepository,
certificationCourseRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringConfigurationRepository,
scoringCertificationService,
scoringDegradationService,
challengeRepository,
services,
}) {
const emitter = AssessmentResult.emitters.PIX_ALGO;
const certificationCourse = await scoringCertificationService.handleV3CertificationScoring({
const certificationCourse = await services.handleV3CertificationScoring({
certificationAssessment,
emitter,
locale,
answerRepository,
assessmentResultRepository,
certificationAssessmentHistoryRepository,
certificationChallengeForScoringRepository,
certificationCourseRepository,
competenceMarkRepository,
flashAlgorithmConfigurationRepository,
flashAlgorithmService,
scoringDegradationService,
scoringConfigurationRepository,
challengeRepository,
});

if (!certificationCourse.isCancelled()) {
Expand Down
22 changes: 21 additions & 1 deletion api/src/certification/evaluation/domain/models/Candidate.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,29 @@
import Joi from 'joi';

import { EntityValidationError } from '../../../../shared/domain/errors.js';

export class Candidate {
static #schema = Joi.object({
accessibilityAdjustmentNeeded: Joi.boolean().optional(),
reconciledAt: Joi.date().required(),
});

/**
* @param {Object} params
* @param {Date} params.reconciledAt
* @param {boolean} [params.accessibilityAdjustmentNeeded]
*/
constructor({ accessibilityAdjustmentNeeded } = {}) {
constructor({ accessibilityAdjustmentNeeded, reconciledAt } = {}) {
this.accessibilityAdjustmentNeeded = !!accessibilityAdjustmentNeeded;
this.reconciledAt = reconciledAt;

this.#validate();
}

#validate() {
const { error } = Candidate.#schema.validate(this, { allowUnknown: false });
if (error) {
throw EntityValidationError.fromJoiErrors(error.details);
}
}
}
Loading

0 comments on commit 3c31d5e

Please sign in to comment.