diff --git a/src/data/nettoyage/checkDataConsistency.ts b/src/data/nettoyage/checkDataConsistency.ts index 157bce8..d1ca3f1 100644 --- a/src/data/nettoyage/checkDataConsistency.ts +++ b/src/data/nettoyage/checkDataConsistency.ts @@ -81,14 +81,6 @@ function checkFamilyDataConsistency(family: Famille): ConsistencyReport { } } - consistencyWarnings.push( - ...family.Evenements.filter((e) => e.Type !== null && e.Date === null).map( - (e) => ({ - familyId: family.Titre, - issueType: `Evenement ${e.notionId} avec Type "${e.Type}" n'a pas de Date`, - }) - ) - ); return { errors: consistencyErrors, warnings: consistencyWarnings, diff --git a/src/data/nettoyage/ignorerEvenements.ts b/src/data/nettoyage/ignorerEvenements.ts new file mode 100644 index 0000000..4bbb808 --- /dev/null +++ b/src/data/nettoyage/ignorerEvenements.ts @@ -0,0 +1,25 @@ +import { EvenementFamille } from "../EvenementFamille"; +import { Famille } from "../Famille"; +import { MessageDeNettoyage, msgDonneeIgnoree } from "./MessageDeNettoyage"; +import { DonneesNettoyees } from "./nettoyerDonneesFamilles"; + +export function ignorerEvenements( + familles: Famille[], + conditionAIgnoree: (evt: EvenementFamille, f: Famille) => boolean, + messageIgnoreeFn: (evt: EvenementFamille, f: Famille) => string +): DonneesNettoyees { + let messages: MessageDeNettoyage[] = []; + const nettoyees = familles.map((f) => { + const nettoyees = f.Evenements.filter((e) => !conditionAIgnoree(e, f)); + const evtIgnorees = f.Evenements.filter((e) => conditionAIgnoree(e, f)); + messages = [ + ...messages, + ...evtIgnorees.map((e) => msgDonneeIgnoree(messageIgnoreeFn(e, f))), + ]; + return { ...f, Evenements: nettoyees }; + }); + return { + familles: nettoyees, + messages, + }; +} diff --git a/src/data/nettoyage/nettoyerDonneesFamilles.ts b/src/data/nettoyage/nettoyerDonneesFamilles.ts index 70963c9..46f9771 100644 --- a/src/data/nettoyage/nettoyerDonneesFamilles.ts +++ b/src/data/nettoyage/nettoyerDonneesFamilles.ts @@ -1,14 +1,15 @@ -import { EvenementFamille } from "../EvenementFamille"; import { Famille } from "../Famille"; import { checkDataConsistency } from "./checkDataConsistency"; import { MessageDeNettoyage, msgDonneeBloquante, - msgDonneeIgnoree, msgDonneeSuspecte, } from "./MessageDeNettoyage"; +import { supprimerLesEntreesVide } from "./supprimerLesEntreesVide"; +import { supprimerLesEvenementsHorsResisstance } from "./supprimerLesEvenementsHorsResisstance"; +import { supprimerLesEvenementsSansDate } from "./supprimerLesEvenementsSansDate"; -type DonneesNettoyees = { +export type DonneesNettoyees = { familles: Famille[]; messages: MessageDeNettoyage[]; }; @@ -37,88 +38,20 @@ export function nettoyerDonneesFamilles( messages = [...messages, ...errorMessages, ...warnings]; - const output2 = supprimerLesEvenementsSansDate(familles); - messages = [...messages, ...output2.messages]; - familles = output2.familles; + type FonctionNettoyage = (familles: Famille[]) => DonneesNettoyees; + const fonctionsDeNettoyage: FonctionNettoyage[] = [ + supprimerLesEvenementsSansDate, + supprimerLesEvenementsHorsResisstance, + ]; - const output3 = supprimerLesEvenementsHorsResisstance(familles); - messages = [...messages, ...output3.messages]; - familles = output3.familles; - - return { - familles, - messages, - }; -} - -/** - * Supprime "Famille de résistant" qui sont souvent créé par erreur - */ -function supprimerLesEntreesVide(familles: Famille[]): DonneesNettoyees { - const nettoyees = familles.filter((f) => f.Titre !== "Famille de résistant"); - const ignorees = familles.filter((f) => f.Titre === "Famille de résistant"); - if (ignorees.length > 0) { - return { - familles: nettoyees, - messages: [ - msgDonneeIgnoree( - `${ - nettoyees.length - familles.length - } enregistrement(s) famille "vide" ignoré(s)` - ), - ], - }; - } else { - return { - familles: nettoyees, - messages: [], - }; + for (const fn of fonctionsDeNettoyage) { + const donneesNettoyees: DonneesNettoyees = fn.apply(null, [familles]); + messages = [...messages, ...donneesNettoyees.messages]; + familles = donneesNettoyees.familles; } -} -function supprimerLesEvenementsSansDate(familles: Famille[]): DonneesNettoyees { - return ignorerEvenements( - familles, - (e: EvenementFamille) => e.Date === null, - (e, f) => - `Evenement "${f.Titre} - ${e.Évènement}" [${e.notionId}] n'as pas de Date il sera ignoré` - ); -} - -function supprimerLesEvenementsHorsResisstance( - familles: Famille[] -): DonneesNettoyees { - return ignorerEvenements( - familles, - (e: EvenementFamille, f: Famille) => { - return ( - e.Date !== null && - ((f.Integration !== null && e.Date < f.Integration) || - (f.Sortie !== null && e.Date > f.Sortie)) - ); - }, - (e, f) => - `Evenement "${f.Titre} - ${e.Évènement}" [${e.notionId}] hors période de résistance il sera ignoré` - ); -} - -function ignorerEvenements( - familles: Famille[], - conditionAIgnoree: (evt: EvenementFamille, f: Famille) => boolean, - messageIgnoreeFn: (evt: EvenementFamille, f: Famille) => string -): DonneesNettoyees { - let messages: MessageDeNettoyage[] = []; - const nettoyees = familles.map((f) => { - const nettoyees = f.Evenements.filter((e) => !conditionAIgnoree(e, f)); - const evtIgnorees = f.Evenements.filter((e) => conditionAIgnoree(e, f)); - messages = [ - ...messages, - ...evtIgnorees.map((e) => msgDonneeIgnoree(messageIgnoreeFn(e, f))), - ]; - return { ...f, Evenements: nettoyees }; - }); return { - familles: nettoyees, + familles, messages, }; } diff --git a/src/data/nettoyage/supprimerLesEntreesVide.ts b/src/data/nettoyage/supprimerLesEntreesVide.ts new file mode 100644 index 0000000..2f565eb --- /dev/null +++ b/src/data/nettoyage/supprimerLesEntreesVide.ts @@ -0,0 +1,28 @@ +import { Famille } from "../Famille"; +import { msgDonneeIgnoree } from "./MessageDeNettoyage"; +import { DonneesNettoyees } from "./nettoyerDonneesFamilles"; + +/** + * Supprime "Famille de résistant" qui sont souvent créé par erreur + */ +export function supprimerLesEntreesVide(familles: Famille[]): DonneesNettoyees { + const nettoyees = familles.filter((f) => f.Titre !== "Famille de résistant"); + const ignorees = familles.filter((f) => f.Titre === "Famille de résistant"); + if (ignorees.length > 0) { + return { + familles: nettoyees, + messages: [ + msgDonneeIgnoree( + `${ + nettoyees.length - familles.length + } enregistrement(s) famille "vide" ignoré(s)` + ), + ], + }; + } else { + return { + familles: nettoyees, + messages: [], + }; + } +} diff --git a/src/data/nettoyage/supprimerLesEvenementsHorsResisstance.ts b/src/data/nettoyage/supprimerLesEvenementsHorsResisstance.ts new file mode 100644 index 0000000..77eb1f0 --- /dev/null +++ b/src/data/nettoyage/supprimerLesEvenementsHorsResisstance.ts @@ -0,0 +1,21 @@ +import { EvenementFamille } from "../EvenementFamille"; +import { Famille } from "../Famille"; +import { DonneesNettoyees } from "./nettoyerDonneesFamilles"; +import { ignorerEvenements } from "./ignorerEvenements"; + +export function supprimerLesEvenementsHorsResisstance( + familles: Famille[] +): DonneesNettoyees { + return ignorerEvenements( + familles, + (e: EvenementFamille, f: Famille) => { + return ( + e.Date !== null && + ((f.Integration !== null && e.Date < f.Integration) || + (f.Sortie !== null && e.Date > f.Sortie)) + ); + }, + (e, f) => + `Evenement "${f.Titre} - ${e.Évènement}" [${e.notionId}] hors période de résistance il sera ignoré` + ); +} diff --git a/src/data/nettoyage/supprimerLesEvenementsSansDate.ts b/src/data/nettoyage/supprimerLesEvenementsSansDate.ts new file mode 100644 index 0000000..267bd7c --- /dev/null +++ b/src/data/nettoyage/supprimerLesEvenementsSansDate.ts @@ -0,0 +1,15 @@ +import { EvenementFamille } from "../EvenementFamille"; +import { Famille } from "../Famille"; +import { DonneesNettoyees } from "./nettoyerDonneesFamilles"; +import { ignorerEvenements } from "./ignorerEvenements"; + +export function supprimerLesEvenementsSansDate( + familles: Famille[] +): DonneesNettoyees { + return ignorerEvenements( + familles, + (e: EvenementFamille) => e.Date === null, + (e, f) => + `Evenement "${f.Titre} - ${e.Évènement}" [${e.notionId}] n'as pas de Date il sera ignoré` + ); +}