Skip to content

Commit

Permalink
[TECH] deplace campaignManagementController vers src/prescription (
Browse files Browse the repository at this point in the history
  • Loading branch information
pix-service-auto-merge authored Mar 27, 2024
2 parents 3120ff4 + 598acd4 commit 7a27da4
Show file tree
Hide file tree
Showing 27 changed files with 446 additions and 473 deletions.
29 changes: 0 additions & 29 deletions api/lib/application/campaigns/campaign-management-controller.js

This file was deleted.

64 changes: 0 additions & 64 deletions api/lib/application/campaigns/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import Joi from 'joi';

import { securityPreHandlers } from '../../../src/shared/application/security-pre-handlers.js';
import { identifiersType } from '../../../src/shared/domain/types/identifiers-type.js';
import { campaignController } from './campaign-controller.js';
import { campaignManagementController } from './campaign-management-controller.js';
import { campaignStatsController } from './campaign-stats-controller.js';

const register = async function (server) {
Expand All @@ -18,68 +16,6 @@ const register = async function (server) {
tags: ['api', 'campaign'],
},
},
{
method: 'GET',
path: '/api/admin/campaigns/{id}',
config: {
pre: [
{
method: (request, h) =>
securityPreHandlers.hasAtLeastOneAccessOf([
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
securityPreHandlers.checkAdminMemberHasRoleCertif,
securityPreHandlers.checkAdminMemberHasRoleSupport,
securityPreHandlers.checkAdminMemberHasRoleMetier,
])(request, h),
assign: 'hasAuthorizationToAccessAdminScope',
},
],
validate: {
params: Joi.object({
id: identifiersType.campaignId,
}),
},
handler: campaignManagementController.getCampaignDetails,
tags: ['api', 'campaign', 'admin'],
notes: [
"- **Cette route est restreinte aux utilisateurs authentifiés ayant les droits d'accès**\n" +
"- Elle permet de récupérer le détail d'une campagne.",
],
},
},
{
method: 'GET',
path: '/api/admin/campaigns/{id}/participations',
config: {
pre: [
{
method: (request, h) =>
securityPreHandlers.hasAtLeastOneAccessOf([
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
securityPreHandlers.checkAdminMemberHasRoleCertif,
securityPreHandlers.checkAdminMemberHasRoleSupport,
securityPreHandlers.checkAdminMemberHasRoleMetier,
])(request, h),
assign: 'hasAuthorizationToAccessAdminScope',
},
],
validate: {
params: Joi.object({
id: identifiersType.campaignId,
}),
query: Joi.object({
'page[number]': Joi.number().integer().empty(''),
'page[size]': Joi.number().integer().empty(''),
}),
},
handler: campaignManagementController.findPaginatedParticipationsForCampaignManagement,
tags: ['api', 'campaign', 'participations', 'admin'],
notes: [
"- **Cette route est restreinte aux utilisateurs authentifiés ayant les droits d'accès**\n" +
"- Elle permet de récupérer les participations d'une campagne donnée.",
],
},
},
{
method: 'GET',
path: '/api/campaigns/{id}/collective-results',
Expand Down
2 changes: 0 additions & 2 deletions api/lib/domain/models/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ import { OrganizationMemberIdentity } from './OrganizationMemberIdentity.js';
import { OrganizationsToAttachToTargetProfile } from './OrganizationsToAttachToTargetProfile.js';
import { OrganizationTag } from './OrganizationTag.js';
import { ParticipantResultsShared } from './ParticipantResultsShared.js';
import { ParticipationForCampaignManagement } from './ParticipationForCampaignManagement.js';
import { PartnerCertificationScoring } from './PartnerCertificationScoring.js';
import { PlacementProfile } from './PlacementProfile.js';
import { PoleEmploiSending } from './PoleEmploiSending.js';
Expand Down Expand Up @@ -241,7 +240,6 @@ export {
OrganizationsToAttachToTargetProfile,
OrganizationTag,
ParticipantResultsShared,
ParticipationForCampaignManagement,
PartnerCertificationScoring,
PlacementProfile,
PoleEmploiSending,
Expand Down
4 changes: 0 additions & 4 deletions api/lib/domain/usecases/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ import * as organizationTagRepository from '../../infrastructure/repositories/or
import * as organizationsToAttachToTargetProfileRepository from '../../infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js';
import * as participantResultRepository from '../../infrastructure/repositories/participant-result-repository.js';
import { participantResultsSharedRepository } from '../../infrastructure/repositories/participant-results-shared-repository.js';
import * as participationsForCampaignManagementRepository from '../../infrastructure/repositories/participations-for-campaign-management-repository.js';
import * as participationsForUserManagementRepository from '../../infrastructure/repositories/participations-for-user-management-repository.js';
import * as poleEmploiSendingRepository from '../../infrastructure/repositories/pole-emploi-sending-repository.js';
import * as resetPasswordDemandRepository from '../../infrastructure/repositories/reset-password-demands-repository.js';
Expand Down Expand Up @@ -178,7 +177,6 @@ import * as organizationValidator from '../validators/organization-with-tags-and
import * as passwordValidator from '../validators/password-validator.js';
import * as userValidator from '../validators/user-validator.js';
import { findTargetProfileOrganizations as findPaginatedFilteredTargetProfileOrganizations } from './find-paginated-filtered-target-profile-organizations.js';
import { getCampaignManagement as getCampaignDetailsManagement } from './get-campaign-details-management.js';

function requirePoleEmploiNotifier() {
if (config.poleEmploi.pushEnabled) {
Expand Down Expand Up @@ -311,7 +309,6 @@ const dependencies = {
organizationValidator,
participantResultRepository,
participantResultsSharedRepository,
participationsForCampaignManagementRepository,
participationsForUserManagementRepository,
passwordGenerator,
passwordValidator,
Expand Down Expand Up @@ -386,7 +383,6 @@ const usecasesWithoutInjectedDependencies = {
...(await importNamedExportsFromDirectory({ path: join(path, './stages') })),
...(await importNamedExportsFromDirectory({ path: join(path, './target-profile-management') })),
findPaginatedFilteredTargetProfileOrganizations,
getCampaignDetailsManagement,
getNextChallengeForV2Certification,
getNextChallengeForV3Certification,
endAssessmentBySupervisor,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,24 @@
import { extractLocaleFromRequest } from '../../../../lib/infrastructure/utils/request-response-utils.js';
import { DomainTransaction } from '../../../shared/domain/DomainTransaction.js';
import { extractParameters } from '../../../shared/infrastructure/utils/query-params-utils.js';
import { usecases } from '../domain/usecases/index.js';
import * as campaignAnalysisSerializer from '../infrastructure/serializers/jsonapi/campaign-analysis-serializer.js';
import * as campaignAssessmentParticipationResultSerializer from '../infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js';
import * as campaignAssessmentParticipationSerializer from '../infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js';
import * as campaignProfileSerializer from '../infrastructure/serializers/jsonapi/campaign-profile-serializer.js';
import * as participationForCampaignManagementSerializer from '../infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js';

const findPaginatedParticipationsForCampaignManagement = async function (request) {
const { campaignId } = request.params;
const { page } = extractParameters(request.query);

const { models: participationsForCampaignManagement, meta } =
await usecases.findPaginatedParticipationsForCampaignManagement({
campaignId,
page,
});
return participationForCampaignManagementSerializer.serialize(participationsForCampaignManagement, meta);
};

const getAnalysis = async function (request, h, dependencies = { campaignAnalysisSerializer }) {
const { userId } = request.auth.credentials;
Expand Down Expand Up @@ -94,6 +108,7 @@ const deleteCampaignParticipationForAdmin = async function (request, h) {
};

const campaignParticipationController = {
findPaginatedParticipationsForCampaignManagement,
getAnalysis,
getCampaignProfile,
getCampaignAssessmentParticipation,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,39 @@ import { campaignParticipationController } from './campaign-participation-contro

const register = async function (server) {
server.route([
{
method: 'GET',
path: '/api/admin/campaigns/{campaignId}/participations',
config: {
pre: [
{
method: (request, h) =>
securityPreHandlers.hasAtLeastOneAccessOf([
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
securityPreHandlers.checkAdminMemberHasRoleCertif,
securityPreHandlers.checkAdminMemberHasRoleSupport,
securityPreHandlers.checkAdminMemberHasRoleMetier,
])(request, h),
assign: 'hasAuthorizationToAccessAdminScope',
},
],
validate: {
params: Joi.object({
campaignId: identifiersType.campaignId,
}),
query: Joi.object({
'page[number]': Joi.number().integer().empty(''),
'page[size]': Joi.number().integer().empty(''),
}),
},
handler: campaignParticipationController.findPaginatedParticipationsForCampaignManagement,
tags: ['api', 'campaign', 'participations', 'admin'],
notes: [
"- **Cette route est restreinte aux utilisateurs authentifiés ayant les droits d'accès**\n" +
"- Elle permet de récupérer les participations d'une campagne donnée.",
],
},
},
{
method: 'GET',
path: '/api/campaign-participations/{id}/analyses',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { knex } from '../../../../../db/knex-database-connection.js';
import { NotFoundError } from '../../../../../lib/domain/errors.js';
import { fetchPage } from '../../../../../lib/infrastructure/utils/knex-utils.js';
import { ParticipationForCampaignManagement } from '../../domain/models/ParticipationForCampaignManagement.js';

const updateParticipantExternalId = async function ({ campaignParticipationId, participantExternalId }) {
const updatedRows = await knex('campaign-participations')
Expand All @@ -11,4 +13,40 @@ const updateParticipantExternalId = async function ({ campaignParticipationId, p
}
};

export { updateParticipantExternalId };
const findPaginatedParticipationsForCampaignManagement = async function ({ campaignId, page }) {
const query = knex('campaign-participations')
.select({
id: 'campaign-participations.id',
lastName: 'view-active-organization-learners.lastName',
firstName: 'view-active-organization-learners.firstName',
userId: 'users.id',
userFirstName: 'users.firstName',
userLastName: 'users.lastName',
participantExternalId: 'campaign-participations.participantExternalId',
status: 'campaign-participations.status',
createdAt: 'campaign-participations.createdAt',
sharedAt: 'campaign-participations.sharedAt',
deletedAt: 'campaign-participations.deletedAt',
deletedBy: 'deletedByUsers.id',
deletedByFirstName: 'deletedByUsers.firstName',
deletedByLastName: 'deletedByUsers.lastName',
})
.join(
'view-active-organization-learners',
'view-active-organization-learners.id',
'campaign-participations.organizationLearnerId',
)
.leftJoin('users as deletedByUsers', 'deletedByUsers.id', 'campaign-participations.deletedBy')
.innerJoin('users', 'users.id', 'campaign-participations.userId')
.where('campaignId', campaignId)
.orderBy(['lastName', 'firstName'], ['asc', 'asc']);

const { results, pagination } = await fetchPage(query, page);

const participationsForCampaignManagement = results.map(
(attributes) => new ParticipationForCampaignManagement(attributes),
);
return { models: participationsForCampaignManagement, meta: { ...pagination } };
};

export { findPaginatedParticipationsForCampaignManagement, updateParticipantExternalId };
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { tokenService } from '../../../shared/domain/services/token-service.js';
import * as queryParamsUtils from '../../../shared/infrastructure/utils/query-params-utils.js';
import { extractParameters } from '../../../shared/infrastructure/utils/query-params-utils.js';
import { usecases } from '../domain/usecases/index.js';
import * as campaignDetailsManagementSerializer from '../infrastructure/serializers/jsonapi/campaign-details-management-serializer.js';
import * as campaignParticipantsActivitySerializer from '../infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js';
import * as campaignReportSerializer from '../infrastructure/serializers/jsonapi/campaign-report-serializer.js';

Expand All @@ -27,6 +28,12 @@ const getById = async function (
return dependencies.campaignReportSerializer.serialize(campaign, {}, { tokenForCampaignResults });
};

const getCampaignDetails = async function (request) {
const campaignId = request.params.id;
const campaign = await usecases.getCampaignManagement({ campaignId });
return campaignDetailsManagementSerializer.serialize(campaign);
};

const findPaginatedFilteredCampaigns = async function (
request,
_,
Expand Down Expand Up @@ -129,6 +136,7 @@ const campaignDetailController = {
findPaginatedFilteredCampaigns,
getCsvAssessmentResults,
getCsvProfilesCollectionResults,
getCampaignDetails,
};

export { campaignDetailController };
29 changes: 29 additions & 0 deletions api/src/prescription/campaign/application/campaign-detail-route.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,35 @@ const register = async function (server) {
tags: ['api', 'campaign'],
},
},
{
method: 'GET',
path: '/api/admin/campaigns/{id}',
config: {
pre: [
{
method: (request, h) =>
securityPreHandlers.hasAtLeastOneAccessOf([
securityPreHandlers.checkAdminMemberHasRoleSuperAdmin,
securityPreHandlers.checkAdminMemberHasRoleCertif,
securityPreHandlers.checkAdminMemberHasRoleSupport,
securityPreHandlers.checkAdminMemberHasRoleMetier,
])(request, h),
assign: 'hasAuthorizationToAccessAdminScope',
},
],
validate: {
params: Joi.object({
id: identifiersType.campaignId,
}),
},
handler: campaignDetailController.getCampaignDetails,
tags: ['api', 'campaign', 'admin'],
notes: [
"- **Cette route est restreinte aux utilisateurs authentifiés ayant les droits d'accès**\n" +
"- Elle permet de récupérer le détail d'une campagne.",
],
},
},
{
method: 'GET',
path: '/api/organizations/{id}/campaigns',
Expand Down
Loading

0 comments on commit 7a27da4

Please sign in to comment.