Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
La-toile-cosmique committed Oct 24, 2024
1 parent 3c31d5e commit 0792922
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 7 deletions.
40 changes: 37 additions & 3 deletions api/db/seeds/data/common/tooling/campaign-tooling.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,20 @@ async function createAssessmentCampaign({
.add(_.random(0, _numberOfDaysBetweenNowAndCreationDate(createdDate)), 'days')
.toDate();

const { status, answersAndKnowledgeElements, validatedSkillsCount, masteryRate, pixScore, buildBadges } =
await _getCompletionCampaignParticipationData(completionDistribution.shift(), campaignSkills, sharedDate);
const {
status,
answersAndKnowledgeElements,
validatedSkillsCount,
masteryRate,
pixScore,
buildBadges,
buildStageAcquisitions,
} = await _getCompletionCampaignParticipationData(
completionDistribution.shift(),
campaignSkills,
targetProfileId,
databaseBuilder,
);

const isStarted = status === CampaignParticipationStatuses.STARTED;
const isShared = status === CampaignParticipationStatuses.SHARED;
Expand Down Expand Up @@ -209,6 +221,18 @@ async function createAssessmentCampaign({
}
}

if (buildStageAcquisitions) {
const stages = await databaseBuilder.knex('stages').where({ targetProfileId });

const stageZero = stages.find((stage) => stage.level === 0 || stage.threshold === 0);

databaseBuilder.factory.buildStageAcquisition({
stageId: stageZero.id,
userId,
campaignParticipationId,
});
}

if (isShared) {
databaseBuilder.factory.buildKnowledgeElementSnapshot({
userId,
Expand Down Expand Up @@ -604,17 +628,26 @@ async function _getProfile(profileName) {
return answersAndKnowledgeElements;
}

async function _getCompletionCampaignParticipationData(completionName, campaignSkills) {
async function _getCompletionCampaignParticipationData(
completionName,
campaignSkills,
targetProfileId,
databaseBuilder,
) {
let answersAndKnowledgeElements,
status,
computedScore,
validatedSkillsCount = 0,
masteryRate = 0,
buildBadges = false,
buildStageAcquisitions = false,
pixScore = 0;

const randomValidatedSkill = generic.pickOneRandomAmong(_.range(campaignSkills.length));

const stages = await databaseBuilder.knex('stages').where({ targetProfileId });
buildStageAcquisitions = stages.length > 0;

switch (completionName) {
case 'STARTED':
answersAndKnowledgeElements = [];
Expand Down Expand Up @@ -662,6 +695,7 @@ async function _getCompletionCampaignParticipationData(completionName, campaignS
masteryRate,
pixScore,
buildBadges,
buildStageAcquisitions,
};
}

Expand Down
4 changes: 2 additions & 2 deletions api/src/profile/application/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const register = async function (server) {
handler: attestationController.getUserAttestation,
notes: [
'- **Cette route est restreinte aux utilisateurs authentifiés**\n' +
"- Récupération du nombre total de Pix de l'utilisateur\n et de ses scorecards" +
"- Récupération de l'attestation utilisateur" +
'- L’id demandé doit correspondre à celui de l’utilisateur authentifié',
],
tags: ['api', 'user', 'profile'],
Expand All @@ -50,7 +50,7 @@ const register = async function (server) {
handler: profileController.getProfile,
notes: [
'- **Cette route est restreinte aux utilisateurs authentifiés**\n' +
"- Récupération du nombre total de Pix de l'utilisateur\n et de ses scorecards" +
"- Récupération du nombre total de Pix de l'utilisateur et de ses scorecards" +
'- L’id demandé doit correspondre à celui de l’utilisateur authentifié',
],
tags: ['api', 'user', 'profile'],
Expand Down
12 changes: 12 additions & 0 deletions mon-pix/app/adapters/quest-result.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import ApplicationAdapter from './application';

export default class QuestResult extends ApplicationAdapter {
urlForQuery(query) {
if (query.campaignParticipationId) {
const url = `${this.host}/${this.namespace}/campaign-participations/${query.campaignParticipationId}/quest-results`;
delete query.campaignParticipationId;
return url;
}
return super.urlForQuery(...arguments);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import MarkdownToHtml from '../../../../markdown-to-html';
import AcquiredBadges from './acquired-badges';
import CustomOrganizationBlock from './custom-organization-block';
import RetryOrResetBlock from './retry-or-reset-block';
import { get } from "@ember/helper";

export default class EvaluationResultsHero extends Component {
@service currentUser;
Expand Down Expand Up @@ -52,6 +53,10 @@ export default class EvaluationResultsHero extends Component {
this.args.showTrainings();
}

get hasQuestResults() {
return this.args.questResults.length > 0;
}

@action
async improveResults() {
if (this.isImproveButtonLoading) return;
Expand Down Expand Up @@ -111,6 +116,8 @@ export default class EvaluationResultsHero extends Component {
}}
@color="yellow"
/>


<div class="evaluation-results-hero-results__stars-text" role="presentation">
{{t
"pages.skill-review.stage.starsAcquired"
Expand All @@ -119,6 +126,11 @@ export default class EvaluationResultsHero extends Component {
}}
</div>
{{/if}}

{{#if this.hasQuestResults}}
{{ get @questResults "0.obtained" }}
{{/if}}

</div>
<div class="evaluation-results-hero__details">
<h2 class="evaluation-results-hero-details__title">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export default class EvaluationResults extends Component {
<EvaluationResultsHero
@campaign={{@model.campaign}}
@campaignParticipationResult={{@model.campaignParticipationResult}}
@questResults={{@model.questResults}}
@hasTrainings={{this.hasTrainings}}
@showTrainings={{this.showTrainings}}
/>
Expand Down
7 changes: 7 additions & 0 deletions mon-pix/app/models/quest-result.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';

export default class QuestResult extends Model {
// attributes
@attr obtained;
@attr reward;
}
8 changes: 6 additions & 2 deletions mon-pix/app/routes/campaigns/assessment/skill-review.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,22 @@ export default class SkillReviewRoute extends Route {
campaignId: campaign.id,
userId: user.id,
});

const questResults = await this.store.query('quest-result', {
campaignParticipationId: campaignParticipationResult.id,
});

const trainings = await campaignParticipation.hasMany('trainings').reload();

// Reload the user to display my trainings link on the navbar menu
if (trainings?.length > 0 && !user.hasRecommendedTrainings) {
await this.currentUser.load();
}

return { campaign, campaignParticipationResult, trainings };
return { campaign, campaignParticipationResult, trainings, questResults };
} catch (error) {
if (error.errors?.[0]?.status === '412') {
this.router.transitionTo('campaigns.entry-point', campaign.code);
return;
} else throw error;
}
}
Expand Down

0 comments on commit 0792922

Please sign in to comment.