From 5e109539c0d116fd112c19945c68f517627c0c1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Arod?= Date: Sat, 7 Sep 2024 14:05:37 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20stats=20g=C3=A9n=C3=A9rales=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 23 +++++++++++++--- .../v2/generales/StatsGenerales.ts | 25 ++++++++++++++++++ .../v2/generales/computeStatsGenerales.ts | 26 +++++++++++++++++++ 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/statistiques/v2/generales/StatsGenerales.ts create mode 100644 src/statistiques/v2/generales/computeStatsGenerales.ts diff --git a/src/index.ts b/src/index.ts index b1527c3..839bdf5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,6 +8,8 @@ import { computeELStats } from "./statistiques/v1/computeELStats"; import { computeStatsParAnciennete } from "./statistiques/v1/computeEvenementsParAnciennete"; import { computeStatsPenales } from "./statistiques/v2/penales/computeStatsPenales"; import { statsPenalesDesc } from "./statistiques/v2/penales/StatsPenales"; +import { computeStatsGenerales } from "./statistiques/v2/generales/computeStatsGenerales"; +import { statsGeneralesDesc } from "./statistiques/v2/generales/StatsGenerales"; type ProcessOptions = { dryRun: boolean; @@ -69,7 +71,8 @@ function buildProcessOptions(): ProcessOptions { JSON.stringify(statsParAnciennete, null, " ") ); - const statsV2 = computeStatsPenales(familles); + const statsPenales = computeStatsPenales(familles); + const statsGenerales = computeStatsGenerales(familles); if (options.dryRun) { console.log( @@ -77,7 +80,14 @@ function buildProcessOptions(): ProcessOptions { ); writeFileSync("./el-stats-v1.json", JSON.stringify(elStats, null, " ")); - writeFileSync("./el-stats-v2.json", JSON.stringify(statsV2, null, " ")); + writeFileSync( + "./el-stats-v2.json", + JSON.stringify( + { generales: statsGenerales, penales: statsPenales }, + null, + " " + ) + ); } else { console.log("Publishing statistics..."); await publishStatisticsToNotion(elStats, currentDate, notionClient); @@ -87,7 +97,14 @@ function buildProcessOptions(): ProcessOptions { "969eac5c-a4eb-49d4-b4ad-c341c9c4c785", statsPenalesDesc, - statsV2 + statsPenales + ); + await publishStatsToPage( + notionClient, + "313751fb-daed-4b33-992f-c86d7ac2de37", + + statsGeneralesDesc, + statsGenerales ); } })(); diff --git a/src/statistiques/v2/generales/StatsGenerales.ts b/src/statistiques/v2/generales/StatsGenerales.ts new file mode 100644 index 0000000..649e91d --- /dev/null +++ b/src/statistiques/v2/generales/StatsGenerales.ts @@ -0,0 +1,25 @@ +import { StatsType } from "../StatsDesc"; + +export const statsGeneralesDesc = { + label: "Stats Générales", + stats: { + nbFamillesActuellementResistantes: { + label: "Nb Familles actuellement Résistantes", + }, + nbFamillesResistantesDepuisLeDebut: { + label: "Nb Familles Résistantes depuis le début du mouvement", + }, + + dureeResistanceMoyenne: { + label: "Duree de résistantes moyenne", + unit: " jours", + }, + + dureeResistanceMedianne: { + label: "Duree de résistantes médiane", + unit: " jours", + }, + }, +} as const; + +export type StatsGenerales = StatsType; diff --git a/src/statistiques/v2/generales/computeStatsGenerales.ts b/src/statistiques/v2/generales/computeStatsGenerales.ts new file mode 100644 index 0000000..25e52fa --- /dev/null +++ b/src/statistiques/v2/generales/computeStatsGenerales.ts @@ -0,0 +1,26 @@ +import { + dureeResistanceInDays, + Famille, + isExResistant, + isResistant, +} from "../../../data/Famille"; +import { average } from "../../../utils/math/average"; +import { median } from "../../../utils/math/median"; +import { StatsGenerales } from "./StatsGenerales"; + +export function computeStatsGenerales(familles: Famille[]): StatsGenerales { + const famillesResistantesOrEx = familles.filter( + (f) => isResistant(f) || isExResistant(f) + ); + const dureesResistances = famillesResistantesOrEx.map( + (f) => dureeResistanceInDays(f)! + ); + const statsGenerales: StatsGenerales = { + nbFamillesActuellementResistantes: familles.filter((f) => isResistant(f)) + .length, + nbFamillesResistantesDepuisLeDebut: famillesResistantesOrEx.length, + dureeResistanceMedianne: median(dureesResistances), + dureeResistanceMoyenne: average(dureesResistances), + }; + return statsGenerales; +}