perf: homepage
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user