From efc388d2415a9405db88150cf1c6bc7119d73917 Mon Sep 17 00:00:00 2001
From: Xavier Carron <33637571+xav-car@users.noreply.github.com>
Date: Fri, 24 Jan 2025 10:16:23 +0100
Subject: [PATCH] tech(api): expose directly campaignLearningContent

---
 .../repositories/learning-content-repository.js               | 3 ++-
 .../usecases/compute-campaign-participation-analysis.js       | 4 +---
 .../campaign-assessment-participation-result-repository.js    | 4 +---
 .../campaign/domain/usecases/compute-campaign-analysis.js     | 4 +---
 .../domain/usecases/compute-campaign-collective-result.js     | 4 +---
 .../start-writing-campaign-assessment-results-to-stream.js    | 4 +---
 .../usecases/compute-campaign-participation-analysis_test.js  | 2 +-
 .../unit/domain/usecases/compute-campaign-analysis_test.js    | 2 +-
 .../usecases/compute-campaign-collective-result_test.js       | 2 +-
 9 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/api/lib/infrastructure/repositories/learning-content-repository.js b/api/lib/infrastructure/repositories/learning-content-repository.js
index d0113c754cb..f46c90be935 100644
--- a/api/lib/infrastructure/repositories/learning-content-repository.js
+++ b/api/lib/infrastructure/repositories/learning-content-repository.js
@@ -3,6 +3,7 @@ import _ from 'lodash';
 import { knex } from '../../../db/knex-database-connection.js';
 import * as campaignRepository from '../../../src/prescription/campaign/infrastructure/repositories/campaign-repository.js';
 import { NoSkillsInCampaignError, NotFoundError } from '../../../src/shared/domain/errors.js';
+import { CampaignLearningContent } from '../../../src/shared/domain/models/CampaignLearningContent.js';
 import { LearningContent } from '../../../src/shared/domain/models/LearningContent.js';
 import * as areaRepository from '../../../src/shared/infrastructure/repositories/area-repository.js';
 import * as competenceRepository from '../../../src/shared/infrastructure/repositories/competence-repository.js';
@@ -17,7 +18,7 @@ async function findByCampaignId(campaignId, locale) {
 
   const frameworks = await _getLearningContentBySkillIds(skills, locale);
 
-  return new LearningContent(frameworks);
+  return new CampaignLearningContent(frameworks);
 }
 
 async function findByTargetProfileId(targetProfileId, locale) {
diff --git a/api/src/prescription/campaign-participation/domain/usecases/compute-campaign-participation-analysis.js b/api/src/prescription/campaign-participation/domain/usecases/compute-campaign-participation-analysis.js
index 073d4697012..5661ef9d31c 100644
--- a/api/src/prescription/campaign-participation/domain/usecases/compute-campaign-participation-analysis.js
+++ b/api/src/prescription/campaign-participation/domain/usecases/compute-campaign-participation-analysis.js
@@ -1,5 +1,4 @@
 import { UserNotAuthorizedToAccessEntityError } from '../../../../shared/domain/errors.js';
-import { CampaignLearningContent } from '../../../../shared/domain/models/CampaignLearningContent.js';
 import { CampaignParticipationDeletedError } from '../errors.js';
 
 const computeCampaignParticipationAnalysis = async function ({
@@ -28,8 +27,7 @@ const computeCampaignParticipationAnalysis = async function ({
     return null;
   }
 
-  const learningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
-  const campaignLearningContent = new CampaignLearningContent(learningContent.frameworks);
+  const campaignLearningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
   const tutorials = await tutorialRepository.list({ locale });
 
   return campaignAnalysisRepository.getCampaignParticipationAnalysis(
diff --git a/api/src/prescription/campaign-participation/infrastructure/repositories/campaign-assessment-participation-result-repository.js b/api/src/prescription/campaign-participation/infrastructure/repositories/campaign-assessment-participation-result-repository.js
index c178a62d6c8..5f05cd93d51 100644
--- a/api/src/prescription/campaign-participation/infrastructure/repositories/campaign-assessment-participation-result-repository.js
+++ b/api/src/prescription/campaign-participation/infrastructure/repositories/campaign-assessment-participation-result-repository.js
@@ -1,13 +1,11 @@
 import { knex } from '../../../../../db/knex-database-connection.js';
 import * as learningContentRepository from '../../../../../lib/infrastructure/repositories/learning-content-repository.js';
 import { NotFoundError } from '../../../../shared/domain/errors.js';
-import { CampaignLearningContent } from '../../../../shared/domain/models/CampaignLearningContent.js';
 import * as knowledgeElementRepository from '../../../../shared/infrastructure/repositories/knowledge-element-repository.js';
 import { CampaignAssessmentParticipationResult } from '../../domain/models/CampaignAssessmentParticipationResult.js';
 
 const getByCampaignIdAndCampaignParticipationId = async function ({ campaignId, campaignParticipationId, locale }) {
-  const learningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
-  const campaignLearningContent = new CampaignLearningContent(learningContent.frameworks);
+  const campaignLearningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
   const result = await _fetchCampaignAssessmentParticipationResultAttributesFromCampaignParticipation(
     campaignId,
     campaignParticipationId,
diff --git a/api/src/prescription/campaign/domain/usecases/compute-campaign-analysis.js b/api/src/prescription/campaign/domain/usecases/compute-campaign-analysis.js
index 6b60f6c1129..923e443d81f 100644
--- a/api/src/prescription/campaign/domain/usecases/compute-campaign-analysis.js
+++ b/api/src/prescription/campaign/domain/usecases/compute-campaign-analysis.js
@@ -1,5 +1,4 @@
 import { UserNotAuthorizedToAccessEntityError } from '../../../../shared/domain/errors.js';
-import { CampaignLearningContent } from '../../../../shared/domain/models/CampaignLearningContent.js';
 
 const computeCampaignAnalysis = async function ({
   userId,
@@ -16,8 +15,7 @@ const computeCampaignAnalysis = async function ({
     throw new UserNotAuthorizedToAccessEntityError('User does not have access to this campaign');
   }
 
-  const learningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
-  const campaignLearningContent = new CampaignLearningContent(learningContent.frameworks);
+  const campaignLearningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
   const tutorials = await tutorialRepository.list({ locale });
 
   return campaignAnalysisRepository.getCampaignAnalysis(campaignId, campaignLearningContent, tutorials);
diff --git a/api/src/prescription/campaign/domain/usecases/compute-campaign-collective-result.js b/api/src/prescription/campaign/domain/usecases/compute-campaign-collective-result.js
index 865f7ee2b62..7ecaab84416 100644
--- a/api/src/prescription/campaign/domain/usecases/compute-campaign-collective-result.js
+++ b/api/src/prescription/campaign/domain/usecases/compute-campaign-collective-result.js
@@ -1,5 +1,4 @@
 import { UserNotAuthorizedToAccessEntityError } from '../../../../shared/domain/errors.js';
-import { CampaignLearningContent } from '../../../../shared/domain/models/CampaignLearningContent.js';
 
 const computeCampaignCollectiveResult = async function ({
   userId,
@@ -15,8 +14,7 @@ const computeCampaignCollectiveResult = async function ({
     throw new UserNotAuthorizedToAccessEntityError('User does not have access to this campaign');
   }
 
-  const learningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
-  const campaignLearningContent = new CampaignLearningContent(learningContent.frameworks);
+  const campaignLearningContent = await learningContentRepository.findByCampaignId(campaignId, locale);
   return campaignCollectiveResultRepository.getCampaignCollectiveResult(campaignId, campaignLearningContent);
 };
 
diff --git a/api/src/prescription/campaign/domain/usecases/start-writing-campaign-assessment-results-to-stream.js b/api/src/prescription/campaign/domain/usecases/start-writing-campaign-assessment-results-to-stream.js
index ca478525e4b..9bb7a80070e 100644
--- a/api/src/prescription/campaign/domain/usecases/start-writing-campaign-assessment-results-to-stream.js
+++ b/api/src/prescription/campaign/domain/usecases/start-writing-campaign-assessment-results-to-stream.js
@@ -5,7 +5,6 @@ dayjs.extend(utc);
 dayjs.extend(timezone);
 
 import { CampaignTypeError } from '../../../../shared/domain/errors.js';
-import { CampaignLearningContent } from '../../../../shared/domain/models/index.js';
 import { CampaignAssessmentExport } from '../../infrastructure/serializers/csv/campaign-assessment-export.js';
 
 /**
@@ -64,7 +63,6 @@ const startWritingCampaignAssessmentResultsToStream = async function ({
   const targetProfile = await targetProfileRepository.getByCampaignId(campaign.id);
   const learningContent = await learningContentRepository.findByCampaignId(campaign.id, i18n.getLocale());
   const stageCollection = await stageCollectionRepository.findStageCollection({ campaignId });
-  const campaignLearningContent = new CampaignLearningContent(learningContent.frameworks);
 
   const organization = await organizationRepository.get(campaign.organizationId);
   const campaignParticipationInfos = await campaignParticipationInfoRepository.findByCampaignId(campaign.id);
@@ -79,7 +77,7 @@ const startWritingCampaignAssessmentResultsToStream = async function ({
     outputStream: writableStream,
     organization,
     targetProfile,
-    learningContent: campaignLearningContent,
+    learningContent,
     stageCollection,
     campaign,
     translate,
diff --git a/api/tests/prescription/campaign-participation/unit/domain/usecases/compute-campaign-participation-analysis_test.js b/api/tests/prescription/campaign-participation/unit/domain/usecases/compute-campaign-participation-analysis_test.js
index 2028e13783c..364caa6b701 100644
--- a/api/tests/prescription/campaign-participation/unit/domain/usecases/compute-campaign-participation-analysis_test.js
+++ b/api/tests/prescription/campaign-participation/unit/domain/usecases/compute-campaign-participation-analysis_test.js
@@ -45,7 +45,7 @@ describe('Unit | UseCase | compute-campaign-participation-analysis', function ()
         campaignParticipation.userId = userId;
         campaignParticipationRepository.get.withArgs(campaignParticipationId).resolves(campaignParticipation);
         campaignRepository.checkIfUserOrganizationHasAccessToCampaign.withArgs(campaignId, userId).resolves(true);
-        learningContentRepository.findByCampaignId.withArgs(campaignId, locale).resolves(learningContent);
+        learningContentRepository.findByCampaignId.withArgs(campaignId, locale).resolves(campaignLearningContent);
         tutorialRepository.list.withArgs({ locale }).resolves(tutorials);
         campaignAnalysisRepository.getCampaignParticipationAnalysis
           .withArgs(campaignId, campaignParticipation, campaignLearningContent, tutorials)
diff --git a/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-analysis_test.js b/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-analysis_test.js
index ca0f822ed8e..29688b099f2 100644
--- a/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-analysis_test.js
+++ b/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-analysis_test.js
@@ -31,7 +31,7 @@ describe('Unit | UseCase | compute-campaign-analysis', function () {
       const tutorials = Symbol('tutorials');
       const campaignAnalysis = Symbol('analysis');
       campaignRepository.checkIfUserOrganizationHasAccessToCampaign.withArgs(campaignId, userId).resolves(true);
-      learningContentRepository.findByCampaignId.withArgs(campaignId, locale).resolves(learningContent);
+      learningContentRepository.findByCampaignId.withArgs(campaignId, locale).resolves(campaignLearningContent);
       tutorialRepository.list.withArgs({ locale }).resolves(tutorials);
       campaignAnalysisRepository.getCampaignAnalysis
         .withArgs(campaignId, campaignLearningContent, tutorials)
diff --git a/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-collective-result_test.js b/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-collective-result_test.js
index dca774b423d..1c42202c444 100644
--- a/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-collective-result_test.js
+++ b/api/tests/prescription/campaign/unit/domain/usecases/compute-campaign-collective-result_test.js
@@ -25,7 +25,7 @@ describe('Unit | UseCase | compute-campaign-collective-result', function () {
   context('User has access to this result', function () {
     beforeEach(function () {
       campaignRepository.checkIfUserOrganizationHasAccessToCampaign.withArgs(campaignId, userId).resolves(true);
-      learningContentRepository.findByCampaignId.withArgs(campaignId, locale).resolves(learningContent);
+      learningContentRepository.findByCampaignId.withArgs(campaignId, locale).resolves(campaignLearningContent);
     });
 
     it('should resolve a CampaignCollectiveResult', async function () {