Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TECH] 🚚 Déplacement de la route de sélection d'étudiants pour la certification #10904

Merged
merged 1 commit into from
Dec 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,6 @@ import * as divisionSerializer from '../../../src/prescription/campaign/infrastr
import * as certificationCenterMembershipSerializer from '../../../src/shared/infrastructure/serializers/jsonapi/certification-center-membership.serializer.js';
import { usecases as teamUsecases } from '../../../src/team/domain/usecases/index.js';
import { usecases } from '../../domain/usecases/index.js';
import * as studentCertificationSerializer from '../../infrastructure/serializers/jsonapi/student-certification-serializer.js';

const getStudents = async function (request) {
const certificationCenterId = request.params.certificationCenterId;
const sessionId = request.params.sessionId;

const { filter, page } = request.query;
if (filter.divisions && !Array.isArray(filter.divisions)) {
filter.divisions = [filter.divisions];
}

const { data, pagination } = await usecases.findStudentsForEnrolment({
certificationCenterId,
sessionId,
page,
filter,
});
return studentCertificationSerializer.serialize(data, pagination);
};

const getDivisions = async function (request) {
const certificationCenterId = request.params.certificationCenterId;
Expand Down Expand Up @@ -77,7 +58,6 @@ const certificationCenterController = {
createCertificationCenterMembershipByEmail,
findCertificationCenterMembershipsByCertificationCenter,
getDivisions,
getStudents,
updateReferer,
};

Expand Down
33 changes: 0 additions & 33 deletions api/lib/application/certification-centers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,39 +93,6 @@ const register = async function (server) {
server.route([
...adminRoutes,
...certifRoutes,
{
method: 'GET',
path: '/api/certification-centers/{certificationCenterId}/sessions/{sessionId}/students',
config: {
validate: {
params: Joi.object({
certificationCenterId: identifiersType.certificationCenterId,
sessionId: identifiersType.sessionId,
}),
query: Joi.object({
filter: Joi.object({
divisions: Joi.array().items(Joi.string()),
}).default({}),
page: {
number: Joi.number().integer(),
size: Joi.number().integer(),
},
}),
},
pre: [
{
method: securityPreHandlers.checkUserIsMemberOfCertificationCenter,
assign: 'isMemberOfCertificationCenter',
},
],
handler: certificationCenterController.getStudents,
notes: [
'- **Cette route est restreinte aux utilisateurs authentifiés**\n' +
"- Récupération d'une liste d'élèves SCO à partir d'un identifiant de centre de certification",
],
tags: ['api', 'certification-center', 'students', 'session'],
},
},
{
method: 'GET',
path: '/api/certification-centers/{certificationCenterId}/divisions',
Expand Down
2 changes: 1 addition & 1 deletion api/lib/domain/usecases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ import * as assessmentResultRepository from '../../../src/shared/infrastructure/
import * as challengeRepository from '../../../src/shared/infrastructure/repositories/challenge-repository.js';
import * as competenceRepository from '../../../src/shared/infrastructure/repositories/competence-repository.js';
import * as courseRepository from '../../../src/shared/infrastructure/repositories/course-repository.js';
import * as organizationLearnerRepository from '../../../src/shared/infrastructure/repositories/organization-learner-repository.js';
import * as organizationRepository from '../../../src/shared/infrastructure/repositories/organization-repository.js';
import * as skillRepository from '../../../src/shared/infrastructure/repositories/skill-repository.js';
import * as userLoginRepository from '../../../src/shared/infrastructure/repositories/user-login-repository.js';
Expand Down Expand Up @@ -136,7 +137,6 @@ import { repositories } from '../../infrastructure/repositories/index.js';
import { certificationCompletedJobRepository } from '../../infrastructure/repositories/jobs/certification-completed-job-repository.js';
import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js';
import * as learningContentRepository from '../../infrastructure/repositories/learning-content-repository.js';
import * as organizationLearnerRepository from '../../infrastructure/repositories/organization-learner-repository.js';
import * as organizationMemberIdentityRepository from '../../infrastructure/repositories/organization-member-identity-repository.js';
import * as organizationTagRepository from '../../infrastructure/repositories/organization-tag-repository.js';
import * as targetProfileRepository from '../../infrastructure/repositories/target-profile-repository.js';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { usecases } from '../domain/usecases/index.js';
import * as studentCertificationSerializer from '../infrastructure/serializers/student-certification-serializer.js';

const getStudents = async function (request) {
const certificationCenterId = request.params.certificationCenterId;
const sessionId = request.params.sessionId;

const { filter, page } = request.query;
if (filter.divisions && !Array.isArray(filter.divisions)) {
filter.divisions = [filter.divisions];
}

const { data, pagination } = await usecases.findStudentsForEnrolment({
certificationCenterId,
sessionId,
page,
filter,
});
return studentCertificationSerializer.serialize(data, pagination);
};

const certificationCenterController = { getStudents };

export { certificationCenterController };
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import Joi from 'joi';

import { securityPreHandlers } from '../../../shared/application/security-pre-handlers.js';
import { identifiersType } from '../../../shared/domain/types/identifiers-type.js';
import { certificationCenterController } from './certification-center-controller.js';

const register = async function (server) {
server.route([
{
method: 'GET',
path: '/api/certification-centers/{certificationCenterId}/sessions/{sessionId}/students',
config: {
validate: {
params: Joi.object({
certificationCenterId: identifiersType.certificationCenterId,
sessionId: identifiersType.sessionId,
}),
query: Joi.object({
filter: Joi.object({
divisions: Joi.array().items(Joi.string()),
}).default({}),
page: {
number: Joi.number().integer(),
size: Joi.number().integer(),
},
}),
},
pre: [
{
method: securityPreHandlers.checkUserIsMemberOfCertificationCenter,
assign: 'isMemberOfCertificationCenter',
},
],
handler: certificationCenterController.getStudents,
notes: [
'- **Cette route est restreinte aux utilisateurs authentifiés**\n' +
"- Récupération d'une liste d'élèves SCO à partir d'un identifiant de centre de certification",
],
tags: ['api', 'certification-center', 'students', 'session'],
},
},
]);
};

const name = 'certification-centers-session-students-api';
export { name, register };
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NotFoundError } from '../../../src/shared/domain/errors.js';
import { StudentForEnrolment } from '../../../src/shared/domain/read-models/StudentForEnrolment.js';
import { NotFoundError } from '../../../../shared/domain/errors.js';
import { StudentForEnrolment } from '../../../../shared/domain/read-models/StudentForEnrolment.js';

const findStudentsForEnrolment = async function ({
certificationCenterId,
Expand Down
13 changes: 13 additions & 0 deletions api/src/certification/enrolment/domain/usecases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@ import { fileURLToPath } from 'node:url';

import * as languageService from '../../../../shared/domain/services/language-service.js';
import * as placementProfileService from '../../../../shared/domain/services/placement-profile-service.js';
import * as organizationLearnerRepository from '../../../../shared/infrastructure/repositories/organization-learner-repository.js';
import * as organizationRepository from '../../../../shared/infrastructure/repositories/organization-repository.js';
import { injectDependencies } from '../../../../shared/infrastructure/utils/dependency-injection.js';
import { importNamedExportsFromDirectory } from '../../../../shared/infrastructure/utils/import-named-exports-from-directory.js';
import * as attendanceSheetPdfUtils from '../../../enrolment/infrastructure/utils/pdf/attendance-sheet-pdf.js';
import * as certificationBadgesService from '../../../shared/domain/services/certification-badges-service.js';
import * as certificationCpfService from '../../../shared/domain/services/certification-cpf-service.js';
import * as sessionValidator from '../../../shared/domain/validators/session-validator.js';
import * as certificationCandidateRepository from '../../../shared/infrastructure/repositories/certification-candidate-repository.js';
import * as complementaryCertificationBadgesRepository from '../../../shared/infrastructure/repositories/complementary-certification-badge-repository.js';
import { enrolmentRepositories } from '../../infrastructure/repositories/index.js';
import * as certificationCandidatesOdsService from '../services/certification-candidates-ods-service.js';
Expand Down Expand Up @@ -40,6 +43,9 @@ import * as temporarySessionsStorageForMassImportService from '../services/tempo
* @typedef {import('../services/certification-candidates-ods-service.js')} CertificationCandidatesOdsService
* @typedef {import('../../../../shared/domain/services/placement-profile-service.js')} PlacementProfileService
* @typedef {import('../../../../shared/domain/services/language-service.js')} languageService
* @typedef {import('../../../../shared/infrastructure/repositories/organization-repository.js')} organizationRepository
* @typedef {import('../../infrastructure/repositories/organization-learner-repository.js')} organizationLearnerRepository
* @typedef {import('../../../shared/infrastructure/repositories/certification-candidate-repository.js')} certificationCandidateRepository
**/

/**
Expand Down Expand Up @@ -70,6 +76,10 @@ import * as temporarySessionsStorageForMassImportService from '../services/tempo
* @typedef {PlacementProfileService} PlacementProfileService
* @typedef {LanguageService} LanguageService
* @typedef {complementaryCertificationBadgesRepository} ComplementaryCertificationBadgesRepository
* @typedef {organizationRepository} OrganizationRepository
* @typedef {organizationLearnerRepository} OrganizationLearnerRepository
* @typedef {certificationCandidateRepository} CertificationCandidateRepository
*
**/
const dependencies = {
certificationBadgesService,
Expand All @@ -84,6 +94,9 @@ const dependencies = {
placementProfileService,
languageService,
complementaryCertificationBadgesRepository,
organizationRepository,
organizationLearnerRepository,
certificationCandidateRepository,
};

const path = dirname(fileURLToPath(import.meta.url));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import * as organizationLearnerRepository from '../../../../../lib/infrastructure/repositories/organization-learner-repository.js';
import * as dataProtectionOfficerRepository from '../../../../organizational-entities/infrastructure/repositories/data-protection-officer.repository.js';
import { injectDependencies } from '../../../../shared/infrastructure/utils/dependency-injection.js';
import * as complementaryCertificationApi from '../../../complementary-certification/application/api/complementary-certification-api.js';
Expand Down Expand Up @@ -38,7 +37,6 @@ import * as sessionRepository from './session-repository.js';
* @typedef {enrolledCandidateRepository} EnrolledCandidateRepository
* @typedef {scoCertificationCandidateRepository} ScoCertificationCandidateRepository
* @typedef {dataProtectionOfficerRepository} DataProtectionOfficerRepository
* @typedef {organizationLearnerRepository} OrganizationLearnerRepository
* @typedef {userRepository} UserRepository
* @typedef {targetProfileHistoryRepository} TargetProfileHistoryRepository
* @typedef {complementaryCertificationCourseRepository} ComplementaryCertificationCourseRepository
Expand All @@ -60,7 +58,6 @@ const repositoriesWithoutInjectedDependencies = {
sessionForAttendanceSheetRepository,
sessionManagementRepository,
sessionRepository,
organizationLearnerRepository,
userRepository,
targetProfileHistoryRepository,
complementaryCertificationCourseRepository,
Expand Down
2 changes: 2 additions & 0 deletions api/src/certification/enrolment/routes.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as attendanceSheet from './application/attendance-sheet-route.js';
import * as certificationCandidate from './application/certification-candidate-route.js';
import * as certificationCenter from './application/certification-center-route.js';
import * as country from './application/country-route.js';
import * as enrolment from './application/enrolment-route.js';
import * as sessionMassImport from './application/session-mass-import-route.js';
Expand All @@ -14,6 +15,7 @@ const certificationEnrolmentRoutes = [
enrolment,
session,
sessionMassImport,
certificationCenter,
subscription,
user,
];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { mailService } from '../../../../lib/domain/services/mail-service.js';
import * as userReconciliationService from '../../../../lib/domain/services/user-reconciliation-service.js';
import { oidcAuthenticationServiceRegistry } from '../../../../lib/domain/usecases/index.js';
import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js';
import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js';
import * as campaignParticipationRepository from '../../../../src/prescription/campaign-participation/infrastructure/repositories/campaign-participation-repository.js';
import * as centerRepository from '../../../certification/enrolment/infrastructure/repositories/center-repository.js';
import * as userRecommendedTrainingRepository from '../../../devcomp/infrastructure/repositories/user-recommended-training-repository.js';
Expand All @@ -19,6 +18,7 @@ import * as userService from '../../../shared/domain/services/user-service.js';
import * as passwordValidator from '../../../shared/domain/validators/password-validator.js';
import * as userValidator from '../../../shared/domain/validators/user-validator.js';
import { adminMemberRepository } from '../../../shared/infrastructure/repositories/admin-member.repository.js';
import * as organizationLearnerRepository from '../../../shared/infrastructure/repositories/organization-learner-repository.js';
import * as userLoginRepository from '../../../shared/infrastructure/repositories/user-login-repository.js';
import * as codeUtils from '../../../shared/infrastructure/utils/code-utils.js';
import { injectDependencies } from '../../../shared/infrastructure/utils/dependency-injection.js';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import * as badgeForCalculationRepository from '../../../../../lib/infrastructur
import * as campaignRepository from '../../../../../lib/infrastructure/repositories/campaign-repository.js';
import * as knowledgeElementRepository from '../../../../../lib/infrastructure/repositories/knowledge-element-repository.js';
import * as learningContentRepository from '../../../../../lib/infrastructure/repositories/learning-content-repository.js';
import * as organizationLearnerRepository from '../../../../../lib/infrastructure/repositories/organization-learner-repository.js';
import * as targetProfileRepository from '../../../../../lib/infrastructure/repositories/target-profile-repository.js';
import * as stageCollectionRepository from '../../../../../lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js';
import * as badgeRepository from '../../../../../src/evaluation/infrastructure/repositories/badge-repository.js';
Expand All @@ -21,6 +20,7 @@ import { config } from '../../../../shared/config.js';
import * as areaRepository from '../../../../shared/infrastructure/repositories/area-repository.js';
import * as assessmentRepository from '../../../../shared/infrastructure/repositories/assessment-repository.js';
import * as competenceRepository from '../../../../shared/infrastructure/repositories/competence-repository.js';
import * as organizationLearnerRepository from '../../../../shared/infrastructure/repositories/organization-learner-repository.js';
import * as organizationRepository from '../../../../shared/infrastructure/repositories/organization-repository.js';
import { injectDependencies } from '../../../../shared/infrastructure/utils/dependency-injection.js';
import { importNamedExportsFromDirectory } from '../../../../shared/infrastructure/utils/import-named-exports-from-directory.js';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import cronParser from 'cron-parser';
import dayjs from 'dayjs';

import * as organizationLearnerRepository from '../../../../../lib/infrastructure/repositories/organization-learner-repository.js';
import { ComputeCertificabilityJob } from '../../../../prescription/learner-management/domain/models/ComputeCertificabilityJob.js';
import { JobScheduleController } from '../../../../shared/application/jobs/job-schedule-controller.js';
import { config } from '../../../../shared/config.js';
import { DomainTransaction } from '../../../../shared/domain/DomainTransaction.js';
import * as organizationLearnerRepository from '../../../../shared/infrastructure/repositories/organization-learner-repository.js';
import { logger } from '../../../../shared/infrastructure/utils/logger.js';
import { computeCertificabilityJobRepository } from '../../../learner-management/infrastructure/repositories/jobs/compute-certificability-job-repository.js';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import { fileURLToPath } from 'node:url';
import * as obfuscationService from '../../../../../lib/domain/services/obfuscation-service.js';
import * as userReconciliationService from '../../../../../lib/domain/services/user-reconciliation-service.js';
import * as campaignRepository from '../../../../../lib/infrastructure/repositories/campaign-repository.js';
import * as libOrganizationLearnerRepository from '../../../../../lib/infrastructure/repositories/organization-learner-repository.js';
import * as userRepository from '../../../../identity-access-management/infrastructure/repositories/user.repository.js';
import * as organizationFeatureApi from '../../../../organizational-entities/application/api/organization-features-api.js';
import * as placementProfileService from '../../../../shared/domain/services/placement-profile-service.js';
import { logErrorWithCorrelationIds } from '../../../../shared/infrastructure/monitoring-tools.js';
import * as libOrganizationLearnerRepository from '../../../../shared/infrastructure/repositories/organization-learner-repository.js';
import * as organizationRepository from '../../../../shared/infrastructure/repositories/organization-repository.js';
import { injectDependencies } from '../../../../shared/infrastructure/utils/dependency-injection.js';
import { importNamedExportsFromDirectory } from '../../../../shared/infrastructure/utils/import-named-exports-from-directory.js';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import _ from 'lodash';

import * as organizationLearnerRepository from '../../../../../lib/infrastructure/repositories/organization-learner-repository.js';
import { DomainTransaction } from '../../../../shared/domain/DomainTransaction.js';
import {
NotFoundError,
OrganizationLearnersCouldNotBeSavedError,
UserCouldNotBeReconciledError,
} from '../../../../shared/domain/errors.js';
import { OrganizationLearner } from '../../../../shared/domain/models/index.js';
import * as organizationLearnerRepository from '../../../../shared/infrastructure/repositories/organization-learner-repository.js';
import { OrganizationLearnerCertificabilityNotUpdatedError } from '../../domain/errors.js';
import { CommonOrganizationLearner } from '../../domain/models/CommonOrganizationLearner.js';
import { OrganizationLearnerForAdmin } from '../../domain/read-models/OrganizationLearnerForAdmin.js';
Expand Down
Loading
Loading