Skip to content

Commit

Permalink
🚚 chore(api): move student certification to src
Browse files Browse the repository at this point in the history
  • Loading branch information
yaf authored Dec 30, 2024
1 parent b13c5c9 commit 6c6d9f7
Show file tree
Hide file tree
Showing 28 changed files with 397 additions and 395 deletions.
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

0 comments on commit 6c6d9f7

Please sign in to comment.