Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
frinyvonnick committed Feb 5, 2025
1 parent 08cad73 commit 543792b
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 15 deletions.
1 change: 1 addition & 0 deletions api/src/quest/domain/models/Eligibility.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
19 changes: 16 additions & 3 deletions api/src/quest/domain/models/Quest.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import * as campaignParticipationRepository from '../../../prescription/campaign-participation/infrastructure/repositories/campaign-participation-repository.js';

export const getQuestResultsForCampaignParticipation = async ({
userId,
campaignParticipationId,
Expand All @@ -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);
}
Expand Down
1 change: 0 additions & 1 deletion api/src/quest/domain/usecases/reward-user.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion api/tests/quest/unit/domain/models/Quest_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 () {
Expand Down

0 comments on commit 543792b

Please sign in to comment.