perf: homepage

This commit is contained in:
Julien Froidefond
2025-08-25 21:30:35 +02:00
parent a440c0729f
commit 5e1e06be47
3 changed files with 66 additions and 67 deletions

View File

@@ -207,43 +207,49 @@ export class EvaluationService {
userEvaluationId: number,
catEval: CategoryEvaluation
): Promise<void> {
// Insérer les skills sélectionnées (sans évaluation)
// ✅ SOLUTION : BULK INSERT pour éviter les requêtes N+1
const values = [];
const params = [];
let paramIndex = 1;
// Préparer toutes les valeurs pour les skills sélectionnées
for (const skillId of catEval.selectedSkillIds) {
const isEvaluated = catEval.skills.some(
(se) => se.skillId === skillId && se.level !== null
);
if (!isEvaluated) {
// Skill sélectionnée mais pas encore évaluée
await client.query(
`
INSERT INTO skill_evaluations
(user_evaluation_id, skill_id, level, is_selected, can_mentor, wants_to_learn)
VALUES ($1, $2, 'never'::skill_level_enum, true, false, false)
`,
[userEvaluationId, skillId]
values.push(
`($${paramIndex++}, $${paramIndex++}, 'never'::skill_level_enum, true, false, false)`
);
params.push(userEvaluationId, skillId);
}
}
// Préparer toutes les valeurs pour les évaluations de skills
for (const skillEval of catEval.skills) {
if (skillEval.level !== null) {
values.push(
`($${paramIndex++}, $${paramIndex++}, $${paramIndex++}, true, $${paramIndex++}, $${paramIndex++})`
);
params.push(
userEvaluationId,
skillEval.skillId,
skillEval.level,
skillEval.canMentor || false,
skillEval.wantsToLearn || false
);
}
}
// Insérer les évaluations de skills
for (const skillEval of catEval.skills) {
if (skillEval.level !== null) {
await client.query(
`
INSERT INTO skill_evaluations
(user_evaluation_id, skill_id, level, is_selected, can_mentor, wants_to_learn)
VALUES ($1, $2, $3, true, $4, $5)
`,
[
userEvaluationId,
skillEval.skillId,
skillEval.level,
skillEval.canMentor || false,
skillEval.wantsToLearn || false,
]
);
}
// Exécuter le BULK INSERT si on a des valeurs
if (values.length > 0) {
const bulkQuery = `
INSERT INTO skill_evaluations
(user_evaluation_id, skill_id, level, is_selected, can_mentor, wants_to_learn)
VALUES ${values.join(", ")}
`;
await client.query(bulkQuery, params);
}
}