Skip to content

Commit 0078361

Browse files
[TECH] Déplacer le domaine parcoursup dans certification/results (PIX-16604).
#11442
2 parents 0d3b430 + 16e417d commit 0078361

File tree

23 files changed

+104
-132
lines changed

23 files changed

+104
-132
lines changed

Diff for: api/server.js

-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { identityAccessManagementRoutes } from './src/identity-access-management
2424
import { learningContentRoutes } from './src/learning-content/routes.js';
2525
import { Metrics } from './src/monitoring/infrastructure/metrics.js';
2626
import { organizationalEntitiesRoutes } from './src/organizational-entities/application/routes.js';
27-
import { parcoursupRoutes } from './src/parcoursup/application/routes.js';
2827
import { campaignRoutes } from './src/prescription/campaign/routes.js';
2928
import { campaignParticipationsRoutes } from './src/prescription/campaign-participation/routes.js';
3029
import { learnerManagementRoutes } from './src/prescription/learner-management/routes.js';
@@ -243,7 +242,6 @@ const setupRoutesAndPlugins = async function (server) {
243242
learningContentRoutes,
244243
...certificationRoutes,
245244
...prescriptionRoutes,
246-
...parcoursupRoutes,
247245
bannerRoutes,
248246
{
249247
name: 'root',
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
import { HttpErrors } from '../../../shared/application/http-errors.js';
22
import { DomainErrorMappingConfiguration } from '../../../shared/application/models/domain-error-mapping-configuration.js';
3-
import { NoCertificationResultForDivision } from '../domain/errors.js';
3+
import { MoreThanOneMatchingCertificationError, NoCertificationResultForDivision } from '../domain/errors.js';
4+
5+
const parcoursupDomainErrorMappingConfiguration = [
6+
{
7+
name: MoreThanOneMatchingCertificationError.name,
8+
httpErrorFn: (error) => new HttpErrors.ConflictError(error.message),
9+
},
10+
].map((domainErrorMappingConfiguration) => new DomainErrorMappingConfiguration(domainErrorMappingConfiguration));
411

512
const resultsDomainErrorMappingConfiguration = [
613
{
@@ -9,4 +16,4 @@ const resultsDomainErrorMappingConfiguration = [
916
},
1017
].map((domainErrorMappingConfiguration) => new DomainErrorMappingConfiguration(domainErrorMappingConfiguration));
1118

12-
export { resultsDomainErrorMappingConfiguration };
19+
export { parcoursupDomainErrorMappingConfiguration, resultsDomainErrorMappingConfiguration };
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { usecases } from '../domain/usecases/index.js';
22

3-
const getCertificationResult = async function (request) {
3+
const getCertificationResultForParcoursup = async function (request) {
44
const { ine, organizationUai, lastName, firstName, birthdate, verificationCode } = request.payload;
55

6-
return usecases.getCertificationResult({
6+
return usecases.getCertificationResultForParcoursup({
77
ine,
88
organizationUai,
99
lastName,
@@ -13,6 +13,6 @@ const getCertificationResult = async function (request) {
1313
});
1414
};
1515

16-
export const certificationController = {
17-
getCertificationResult,
16+
export const parcoursupController = {
17+
getCertificationResultForParcoursup,
1818
};

Diff for: api/src/parcoursup/application/certification-route.js renamed to api/src/certification/results/application/parcoursup-route.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import Joi from 'joi';
33
import {
44
certificationVerificationCodeType,
55
studentIdentifierType,
6-
} from '../../shared/domain/types/identifiers-type.js';
7-
import { responseObjectErrorDoc } from '../../shared/infrastructure/open-api-doc/response-object-error-doc.js';
8-
import { certificationController } from './certification-controller.js';
6+
} from '../../../shared/domain/types/identifiers-type.js';
7+
import { responseObjectErrorDoc } from '../../../shared/infrastructure/open-api-doc/response-object-error-doc.js';
8+
import { parcoursupController } from './parcoursup-controller.js';
99

1010
const register = async function (server) {
1111
server.route([
@@ -43,7 +43,7 @@ const register = async function (server) {
4343
)
4444
.required(),
4545
},
46-
handler: certificationController.getCertificationResult,
46+
handler: parcoursupController.getCertificationResultForParcoursup,
4747
tags: ['api', 'parcoursup'],
4848
notes: [
4949
'**Cette route est accessible uniquement à Parcoursup**\n' +

Diff for: api/src/certification/results/domain/errors.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { DomainError } from '../../../shared/domain/errors.js';
22

3+
class MoreThanOneMatchingCertificationError extends DomainError {
4+
constructor(message = 'More than one candidate found for current search parameters') {
5+
super(message);
6+
}
7+
}
8+
39
class NoCertificationResultForDivision extends DomainError {
410
constructor(message = 'Aucun résultat de certification pour cette classe.') {
511
super(message);
612
}
713
}
814

9-
export { NoCertificationResultForDivision };
15+
export { MoreThanOneMatchingCertificationError, NoCertificationResultForDivision };

Diff for: api/src/parcoursup/domain/usecases/get-certification-result.js renamed to api/src/certification/results/domain/usecases/get-certification-result-for-parcoursup.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
2-
* @typedef {import('../../domain/usecases/index.js').CertificationRepository} CertificationRepository
3-
* @typedef {import('../read-models/CertificationResult.js').CertificationResult} CertificationResult
4-
* @typedef {import('../../../shared/domain/errors.js').NotFoundError} NotFoundError
2+
* @typedef {import('./index.js').CertificationParcoursupRepository} CertificationParcoursupRepository
3+
* @typedef {import('../read-models/parcoursup/CertificationResult.js').CertificationResult} CertificationResult
4+
* @typedef {import('../../../../shared/domain/errors.js').NotFoundError} NotFoundError
55
*/
66

77
import { MoreThanOneMatchingCertificationError } from '../errors.js';
@@ -14,34 +14,34 @@ import { MoreThanOneMatchingCertificationError } from '../errors.js';
1414
* @param {string} params.firstName
1515
* @param {string} params.birthdate - Format YYYY-MM-DD
1616
* @param {string} params.verificationCode
17-
* @param {CertificationRepository} params.certificationRepository
17+
* @param {CertificationParcoursupRepository} params.certificationParcoursupRepository
1818
*
1919
* @returns {CertificationResult} matching candidate certification result
2020
* @throws {MoreThanOneMatchingCertificationError} in some cases (INE for example) there might be duplicates
2121
* @throws {NotFoundError} if no certification exists for this candidate
2222
**/
23-
export const getCertificationResult = async ({
23+
export const getCertificationResultForParcoursup = async ({
2424
ine,
2525
organizationUai,
2626
lastName,
2727
firstName,
2828
birthdate,
2929
verificationCode,
30-
certificationRepository,
30+
certificationParcoursupRepository,
3131
}) => {
3232
let certifications = [];
3333

3434
if (ine) {
35-
certifications = await certificationRepository.getByINE({ ine });
35+
certifications = await certificationParcoursupRepository.getByINE({ ine });
3636
} else if (organizationUai) {
37-
certifications = await certificationRepository.getByOrganizationUAI({
37+
certifications = await certificationParcoursupRepository.getByOrganizationUAI({
3838
organizationUai,
3939
lastName,
4040
firstName,
4141
birthdate,
4242
});
4343
} else if (verificationCode) {
44-
certifications = await certificationRepository.getByVerificationCode({ verificationCode });
44+
certifications = await certificationParcoursupRepository.getByVerificationCode({ verificationCode });
4545
}
4646

4747
if (certifications.length !== 1) {

Diff for: api/src/certification/results/domain/usecases/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import * as certificationReportRepository from '../../../shared/infrastructure/r
1010
import * as sharedSessionRepository from '../../../shared/infrastructure/repositories/session-repository.js';
1111
import * as certificateRepository from '../../infrastructure/repositories/certificate-repository.js';
1212
import * as certificationLivretScolaireRepository from '../../infrastructure/repositories/certification-livret-scolaire-repository.js';
13+
import * as certificationParcoursupRepository from '../../infrastructure/repositories/certification-parcoursup-repository.js';
1314
import * as certificationResultRepository from '../../infrastructure/repositories/certification-result-repository.js';
1415
import * as cleaCertifiedCandidateRepository from '../../infrastructure/repositories/clea-certified-candidate-repository.js';
1516
import * as competenceTreeRepository from '../../infrastructure/repositories/competence-tree-repository.js';
@@ -22,6 +23,7 @@ import * as scoCertificationCandidateRepository from '../../infrastructure/repos
2223
* @typedef {scoCertificationCandidateRepository} ScoCertificationCandidateRepository
2324
* @typedef {certificationCourseRepository} CertificationCourseRepository
2425
* @typedef {certificateRepository} CertificateRepository
26+
* @typedef {certificationParcoursupRepository} CertificationParcoursupRepository
2527
* @typedef {certificationReportRepository} CertificationReportRepository
2628
* @typedef {cleaCertifiedCandidateRepository} CleaCertifiedCandidateRepository
2729
* @typedef {sessionEnrolmentRepository} SessionEnrolmentRepository
@@ -35,6 +37,7 @@ const dependencies = {
3537
certificationResultRepository,
3638
scoCertificationCandidateRepository,
3739
certificateRepository,
40+
certificationParcoursupRepository,
3841
certificationReportRepository,
3942
cleaCertifiedCandidateRepository,
4043
sessionEnrolmentRepository,

Diff for: api/src/parcoursup/infrastructure/repositories/certification-repository.js renamed to api/src/certification/results/infrastructure/repositories/certification-parcoursup-repository.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { datamartKnex } from '../../../../db/knex-database-connection.js';
2-
import { NotFoundError } from '../../../shared/domain/errors.js';
3-
import { CertificationResult } from '../../domain/read-models/CertificationResult.js';
4-
import { Competence } from '../../domain/read-models/Competence.js';
1+
import { datamartKnex } from '../../../../../db/knex-database-connection.js';
2+
import { NotFoundError } from '../../../../shared/domain/errors.js';
3+
import { CertificationResult } from '../../domain/read-models/parcoursup/CertificationResult.js';
4+
import { Competence } from '../../domain/read-models/parcoursup/Competence.js';
55

66
const getByINE = async ({ ine }) => {
77
return _getBySearchParams({

Diff for: api/src/certification/results/routes.js

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import * as certificationResults from './application/certification-results-route
44
import * as certification from './application/certification-route.js';
55
import * as livretScolaire from './application/livret-scolaire-route.js';
66
import * as organization from './application/organization-route.js';
7+
import * as parcoursup from './application/parcoursup-route.js';
78

89
const certificationResultRoutes = [
910
certificationAttestation,
@@ -12,6 +13,7 @@ const certificationResultRoutes = [
1213
certification,
1314
livretScolaire,
1415
organization,
16+
parcoursup,
1517
];
1618

1719
export { certificationResultRoutes };

Diff for: api/src/certification/shared/application/http-error-mapper-configuration.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import { parcoursupDomainErrorMappingConfiguration } from '../../../parcoursup/application/http-error-mapper-configuration.js';
21
import { HttpErrors } from '../../../shared/application/http-errors.js';
32
import { DomainErrorMappingConfiguration } from '../../../shared/application/models/domain-error-mapping-configuration.js';
43
import { configurationDomainErrorMappingConfiguration } from '../../configuration/application/http-error-mapper-configuration.js';
54
import { enrolmentDomainErrorMappingConfiguration } from '../../enrolment/application/http-error-mapper-configuration.js';
6-
import { resultsDomainErrorMappingConfiguration } from '../../results/application/http-error-mapper-configuration.js';
5+
import {
6+
parcoursupDomainErrorMappingConfiguration,
7+
resultsDomainErrorMappingConfiguration,
8+
} from '../../results/application/http-error-mapper-configuration.js';
79
import { sessionDomainErrorMappingConfiguration } from '../../session-management/application/http-error-mapper-configuration.js';
810
import { CertificationCourseUpdateError, InvalidCertificationReportForFinalization } from '../domain/errors.js';
911

@@ -21,10 +23,10 @@ const certificationDomainErrorMappingConfiguration = [
2123
].map((domainErrorMappingConfiguration) => new DomainErrorMappingConfiguration(domainErrorMappingConfiguration));
2224

2325
certificationDomainErrorMappingConfiguration.push(
26+
...parcoursupDomainErrorMappingConfiguration,
2427
...resultsDomainErrorMappingConfiguration,
2528
...enrolmentDomainErrorMappingConfiguration,
2629
...sessionDomainErrorMappingConfiguration,
2730
...configurationDomainErrorMappingConfiguration,
28-
...parcoursupDomainErrorMappingConfiguration,
2931
);
3032
export { certificationDomainErrorMappingConfiguration };

Diff for: api/src/parcoursup/application/http-error-mapper-configuration.js

-10
This file was deleted.

Diff for: api/src/parcoursup/application/routes.js

-3
This file was deleted.

Diff for: api/src/parcoursup/domain/errors.js

-7
This file was deleted.

Diff for: api/src/parcoursup/domain/usecases/index.js

-28
This file was deleted.

Diff for: api/tests/parcoursup/acceptance/application/certification-route_test.js renamed to api/tests/certification/results/acceptance/application/parcoursup-route_test.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import {
33
datamartBuilder,
44
expect,
55
generateValidRequestAuthorizationHeaderForApplication,
6-
} from '../../../test-helper.js';
6+
} from '../../../../test-helper.js';
77

8-
describe('Parcoursup | Acceptance | Application | certification-route', function () {
8+
describe('Certification | Results | Acceptance | Application | parcoursup-route', function () {
99
let server,
1010
ine,
1111
organizationUai,

Diff for: api/tests/parcoursup/integration/repositories/certification-repository_test.js renamed to api/tests/certification/results/integration/infrastructure/repositories/certification-parcoursup-repository_test.js

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import * as certificationRepository from '../../../../../api/src/parcoursup/infrastructure/repositories/certification-repository.js';
2-
import { NotFoundError } from '../../../../src/shared/domain/errors.js';
3-
import { catchErr, datamartBuilder, domainBuilder, expect } from '../../../test-helper.js';
1+
import * as certificationRepository from '../../../../../../src/certification/results/infrastructure/repositories/certification-parcoursup-repository.js';
2+
import { NotFoundError } from '../../../../../../src/shared/domain/errors.js';
3+
import { catchErr, datamartBuilder, domainBuilder, expect } from '../../../../../test-helper.js';
44

5-
describe('Parcoursup | Infrastructure | Integration | Repositories | certification', function () {
5+
describe('Certification | Results | Infrastructure | Integration | Repositories | certification-parcoursup', function () {
66
describe('#getByINE', function () {
77
describe('when a certification is found', function () {
88
it('should return the certification', async function () {
@@ -38,7 +38,7 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati
3838
const results = await certificationRepository.getByINE({ ine });
3939

4040
// then
41-
const expectedCertification = domainBuilder.parcoursup.buildCertificationResult({
41+
const expectedCertification = domainBuilder.certification.results.parcoursup.buildCertificationResult({
4242
ine,
4343
organizationUai: 'UAI ETAB ELEVE',
4444
lastName: 'NOM-ELEVE',
@@ -48,13 +48,13 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati
4848
pixScore: 327,
4949
certificationDate: new Date('2024-11-22T09:39:54Z'),
5050
competences: [
51-
domainBuilder.parcoursup.buildCompetence({
51+
domainBuilder.certification.results.parcoursup.buildCompetence({
5252
code: '1.1',
5353
name: 'Mener une recherche et une veille d’information',
5454
areaName: 'Informations et données',
5555
level: 3,
5656
}),
57-
domainBuilder.parcoursup.buildCompetence({
57+
domainBuilder.certification.results.parcoursup.buildCompetence({
5858
code: '1.2',
5959
name: 'Gérer des données',
6060
areaName: 'Informations et données',
@@ -124,7 +124,7 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati
124124
});
125125

126126
// then
127-
const expectedCertification = domainBuilder.parcoursup.buildCertificationResult({
127+
const expectedCertification = domainBuilder.certification.results.parcoursup.buildCertificationResult({
128128
ine: '1234',
129129
organizationUai,
130130
lastName,
@@ -134,13 +134,13 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati
134134
pixScore: 327,
135135
certificationDate: new Date('2024-11-22T09:39:54Z'),
136136
competences: [
137-
domainBuilder.parcoursup.buildCompetence({
137+
domainBuilder.certification.results.parcoursup.buildCompetence({
138138
code: '1.1',
139139
name: 'Mener une recherche et une veille d’information',
140140
areaName: 'Informations et données',
141141
level: 3,
142142
}),
143-
domainBuilder.parcoursup.buildCompetence({
143+
domainBuilder.certification.results.parcoursup.buildCompetence({
144144
code: '1.2',
145145
name: 'Gérer des données',
146146
areaName: 'Informations et données',
@@ -214,21 +214,21 @@ describe('Parcoursup | Infrastructure | Integration | Repositories | certificati
214214
});
215215

216216
// then
217-
const expectedCertification = domainBuilder.parcoursup.buildCertificationResult({
217+
const expectedCertification = domainBuilder.certification.results.parcoursup.buildCertificationResult({
218218
lastName,
219219
firstName,
220220
birthdate,
221221
status: 'validated',
222222
pixScore: 327,
223223
certificationDate: new Date('2024-11-22T09:39:54Z'),
224224
competences: [
225-
domainBuilder.parcoursup.buildCompetence({
225+
domainBuilder.certification.results.parcoursup.buildCompetence({
226226
code: '1.1',
227227
name: 'Mener une recherche et une veille d’information',
228228
areaName: 'Informations et données',
229229
level: 3,
230230
}),
231-
domainBuilder.parcoursup.buildCompetence({
231+
domainBuilder.certification.results.parcoursup.buildCompetence({
232232
code: '1.2',
233233
name: 'Gérer des données',
234234
areaName: 'Informations et données',

0 commit comments

Comments
 (0)