Expand representative QA report summary
This commit is contained in:
@@ -3053,6 +3053,7 @@ function buildQaReport(results, failed) {
|
|||||||
failureReason: objective.failureReason ?? ''
|
failureReason: objective.failureReason ?? ''
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
|
const summary = buildQaReportSummary(results, failed, missedObjectives);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
app: 'heros_web',
|
app: 'heros_web',
|
||||||
@@ -3064,12 +3065,7 @@ function buildQaReport(results, failed) {
|
|||||||
cumulativeMode,
|
cumulativeMode,
|
||||||
requestedBattles: [...requestedBattles],
|
requestedBattles: [...requestedBattles],
|
||||||
battleCount: results.length,
|
battleCount: results.length,
|
||||||
summary: {
|
summary,
|
||||||
victories: results.filter((result) => result.outcome === 'victory').length,
|
|
||||||
failures: failed.length,
|
|
||||||
missedObjectiveCount: missedObjectives.length,
|
|
||||||
battlesWithMissedObjectives: [...new Set(missedObjectives.map((objective) => objective.battleNo))]
|
|
||||||
},
|
|
||||||
missedObjectives,
|
missedObjectives,
|
||||||
results: results.map((result) => ({
|
results: results.map((result) => ({
|
||||||
no: result.no,
|
no: result.no,
|
||||||
@@ -3093,3 +3089,70 @@ function buildQaReport(results, failed) {
|
|||||||
}))
|
}))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildQaReportSummary(results, failed, missedObjectives) {
|
||||||
|
const turnValues = results.map((result) => result.finalTurn ?? 0).filter((turn) => turn > 0);
|
||||||
|
const totalTurns = turnValues.reduce((total, turn) => total + turn, 0);
|
||||||
|
const longestBattle = results.reduce((current, result) => {
|
||||||
|
if (!current || (result.finalTurn ?? 0) > (current.finalTurn ?? 0)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return current;
|
||||||
|
}, undefined);
|
||||||
|
const totals = results.reduce(
|
||||||
|
(summary, result) => {
|
||||||
|
summary.objectiveCount += result.objectiveCount ?? 0;
|
||||||
|
summary.objectivesAchieved += result.objectivesAchieved ?? 0;
|
||||||
|
summary.itemsUsed += result.itemsUsed ?? 0;
|
||||||
|
summary.supports += result.supports ?? 0;
|
||||||
|
if (result.campSuppliesUsed) {
|
||||||
|
summary.campSuppliesUsed.bean += result.campSuppliesUsed.bean ?? 0;
|
||||||
|
summary.campSuppliesUsed.salve += result.campSuppliesUsed.salve ?? 0;
|
||||||
|
summary.campSuppliesUsed.wine += result.campSuppliesUsed.wine ?? 0;
|
||||||
|
}
|
||||||
|
return summary;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
objectiveCount: 0,
|
||||||
|
objectivesAchieved: 0,
|
||||||
|
itemsUsed: 0,
|
||||||
|
supports: 0,
|
||||||
|
campSuppliesUsed: { bean: 0, salve: 0, wine: 0 }
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const latestCampaign = results.at(-1)?.campaign;
|
||||||
|
|
||||||
|
return {
|
||||||
|
victories: results.filter((result) => result.outcome === 'victory').length,
|
||||||
|
failures: failed.length,
|
||||||
|
missedObjectiveCount: missedObjectives.length,
|
||||||
|
battlesWithMissedObjectives: [...new Set(missedObjectives.map((objective) => objective.battleNo))],
|
||||||
|
objectivesAchieved: totals.objectivesAchieved,
|
||||||
|
objectiveCount: totals.objectiveCount,
|
||||||
|
turns: {
|
||||||
|
total: totalTurns,
|
||||||
|
average: turnValues.length > 0 ? Number((totalTurns / turnValues.length).toFixed(1)) : 0,
|
||||||
|
min: turnValues.length > 0 ? Math.min(...turnValues) : 0,
|
||||||
|
max: turnValues.length > 0 ? Math.max(...turnValues) : 0,
|
||||||
|
longestBattle: longestBattle ? { no: longestBattle.no, id: longestBattle.id, turn: longestBattle.finalTurn ?? 0 } : null
|
||||||
|
},
|
||||||
|
resources: {
|
||||||
|
itemsUsed: totals.itemsUsed,
|
||||||
|
supports: totals.supports,
|
||||||
|
campSuppliesUsed: totals.campSuppliesUsed
|
||||||
|
},
|
||||||
|
latestCampaign: latestCampaign
|
||||||
|
? {
|
||||||
|
battleCount: latestCampaign.battleCount,
|
||||||
|
gold: latestCampaign.gold,
|
||||||
|
supplies: latestCampaign.supplies,
|
||||||
|
rosterCount: latestCampaign.rosterCount,
|
||||||
|
levelMin: latestCampaign.levelMin,
|
||||||
|
levelMax: latestCampaign.levelMax,
|
||||||
|
levelAvg: latestCampaign.levelAvg,
|
||||||
|
lowHp: latestCampaign.lowHp,
|
||||||
|
topLevels: latestCampaign.topLevels
|
||||||
|
}
|
||||||
|
: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user