diff --git a/api/src/quest/domain/models/Eligibility.js b/api/src/quest/domain/models/Eligibility.js index 96649725895..7dc2d6074e7 100644 --- a/api/src/quest/domain/models/Eligibility.js +++ b/api/src/quest/domain/models/Eligibility.js @@ -7,6 +7,7 @@ export const TYPES = { export class Eligibility { constructor({ organizationLearner, organization, campaignParticipations = [] }) { this.organizationLearner = { + id: organizationLearner.id, MEFCode: organizationLearner?.MEFCode, }; this.organization = organization; diff --git a/api/src/quest/domain/models/Quest.js b/api/src/quest/domain/models/Quest.js index 01ecb930c1b..cb571ed8abe 100644 --- a/api/src/quest/domain/models/Quest.js +++ b/api/src/quest/domain/models/Quest.js @@ -27,14 +27,27 @@ class Quest { } isGrantedWithParticipationId({ eligibility, campaignParticipationId }) { - const criterion = this.eligibilityRequirements.filter( + console.log('eligibility', JSON.stringify(eligibility, undefined, 2)); + const criteria = this.eligibilityRequirements.filter( (eligibilityRequirement) => eligibilityRequirement.type === ELIGIBILITY_TYPES.CAMPAIGN_PARTICIPATIONS, ); - const eligibilityData = eligibility.campaignParticipations.filter( + const campaignParticipation = eligibility.campaignParticipations.find( (campaignParticipation) => campaignParticipation.id === campaignParticipationId, ); + console.log('campaignParticipation', JSON.stringify(campaignParticipation, undefined, 2)); + + for (const criterion of criteria) { + console.log('criterion', JSON.stringify(criterion, undefined, 2)); + const alterKey = criterion.data.targetProfileIds !== undefined ? 'targetProfileIds' : 'targetProfileId'; + console.log({ alterKey }); + const isQuestRelatedToCampaignParticipationId = criterion.data[alterKey].includes( + campaignParticipation.targetProfileId, + ); + console.log(isQuestRelatedToCampaignParticipationId); + + if (isQuestRelatedToCampaignParticipationId) return true; + } - // run to the loop ? return false; } diff --git a/api/src/quest/domain/usecases/get-quest-results-for-campaign-participation.js b/api/src/quest/domain/usecases/get-quest-results-for-campaign-participation.js index a4d852ccacd..c9036bcfd26 100644 --- a/api/src/quest/domain/usecases/get-quest-results-for-campaign-participation.js +++ b/api/src/quest/domain/usecases/get-quest-results-for-campaign-participation.js @@ -1,3 +1,5 @@ +import * as campaignParticipationRepository from '../../../prescription/campaign-participation/infrastructure/repositories/campaign-participation-repository.js'; + export const getQuestResultsForCampaignParticipation = async ({ userId, campaignParticipationId, @@ -11,18 +13,20 @@ export const getQuestResultsForCampaignParticipation = async ({ return []; } - const eligibilities = await eligibilityRepository.find({ userId }); + const campaignParticipation = await campaignParticipationRepository.get(campaignParticipationId); - const questResults = []; - for (const quest of quests) { - const isEligibleForQuest = eligibilities.some((eligibility) => - quest.isGrantedWithParticipationId({ eligibility, campaignParticipationId }), - ); + const eligibilities = await eligibilityRepository.find({ userId }); + const eligibility = eligibilities.find( + (eligibility) => eligibility.organizationLearner.id === campaignParticipation.organizationLearnerId, + ); - if (!isEligibleForQuest) { - continue; - } + const questsRelatedToCampaignParticipation = quests.filter((q) => + q.isGrantedWithParticipationId({ eligibility, campaignParticipationId }), + ); + console.log({ questsRelatedToCampaignParticipation }); + const questResults = []; + for (const quest of questsRelatedToCampaignParticipation) { const questResult = await rewardRepository.getByQuestAndUserId({ userId, quest }); questResults.push(questResult); } diff --git a/api/src/quest/domain/usecases/reward-user.js b/api/src/quest/domain/usecases/reward-user.js index da7411b49b4..cf09b31a9e5 100644 --- a/api/src/quest/domain/usecases/reward-user.js +++ b/api/src/quest/domain/usecases/reward-user.js @@ -16,7 +16,6 @@ export const rewardUser = async ({ } const eligibilities = await eligibilityRepository.find({ userId }); - console.log('[OHE]', JSON.stringify(eligibilities, undefined, 2)); const rewards = await rewardRepository.getByUserId({ userId }); const rewardIds = rewards.map((reward) => reward.rewardId); diff --git a/api/tests/quest/integration/domain/usecases/get-quest-results-for-campaign-participation_test.js b/api/tests/quest/integration/domain/usecases/get-quest-results-for-campaign-participation_test.js index ac240e9df3e..8245b33ab8c 100644 --- a/api/tests/quest/integration/domain/usecases/get-quest-results-for-campaign-participation_test.js +++ b/api/tests/quest/integration/domain/usecases/get-quest-results-for-campaign-participation_test.js @@ -3,7 +3,7 @@ import { QuestResult } from '../../../../../src/quest/domain/models/QuestResult. import { usecases } from '../../../../../src/quest/domain/usecases/index.js'; import { databaseBuilder, expect } from '../../../../test-helper.js'; -describe('Quest | Integration | Domain | Usecases | getQuestResultsForCampaignParticipation', function () { +describe.only('Quest | Integration | Domain | Usecases | getQuestResultsForCampaignParticipation', function () { describe('when there are multiple target profiles in the quest requirements', function () { it('should get quest results for campaign participation belonging to one of the target profiles', async function () { const organizationId = databaseBuilder.factory.buildOrganization({ type: 'SCO' }).id; diff --git a/api/tests/quest/unit/domain/models/Quest_test.js b/api/tests/quest/unit/domain/models/Quest_test.js index 7e048a6917a..43d17583a1f 100644 --- a/api/tests/quest/unit/domain/models/Quest_test.js +++ b/api/tests/quest/unit/domain/models/Quest_test.js @@ -5,7 +5,7 @@ import { Success, TYPES as SUCCESS_TYPES } from '../../../../../src/quest/domain import { CampaignParticipationStatuses, KnowledgeElement } from '../../../../../src/shared/domain/models/index.js'; import { domainBuilder, expect } from '../../../../test-helper.js'; -describe.only('Quest | Unit | Domain | Models | Quest ', function () { +describe('Quest | Unit | Domain | Models | Quest ', function () { describe('#isEligible', function () { describe('edge cases', function () { it('make it work with targetProfileIds', function () {