refactor: split nettoyaerDonneesFamilles

wip-related-pages
Sébastien Arod 2024-10-14 13:24:30 +02:00
parent 3480e18c76
commit 313e5b6276
6 changed files with 103 additions and 89 deletions

View File

@ -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 { return {
errors: consistencyErrors, errors: consistencyErrors,
warnings: consistencyWarnings, warnings: consistencyWarnings,

View File

@ -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,
};
}

View File

@ -1,14 +1,15 @@
import { EvenementFamille } from "../EvenementFamille";
import { Famille } from "../Famille"; import { Famille } from "../Famille";
import { checkDataConsistency } from "./checkDataConsistency"; import { checkDataConsistency } from "./checkDataConsistency";
import { import {
MessageDeNettoyage, MessageDeNettoyage,
msgDonneeBloquante, msgDonneeBloquante,
msgDonneeIgnoree,
msgDonneeSuspecte, msgDonneeSuspecte,
} from "./MessageDeNettoyage"; } from "./MessageDeNettoyage";
import { supprimerLesEntreesVide } from "./supprimerLesEntreesVide";
import { supprimerLesEvenementsHorsResisstance } from "./supprimerLesEvenementsHorsResisstance";
import { supprimerLesEvenementsSansDate } from "./supprimerLesEvenementsSansDate";
type DonneesNettoyees = { export type DonneesNettoyees = {
familles: Famille[]; familles: Famille[];
messages: MessageDeNettoyage[]; messages: MessageDeNettoyage[];
}; };
@ -37,88 +38,20 @@ export function nettoyerDonneesFamilles(
messages = [...messages, ...errorMessages, ...warnings]; messages = [...messages, ...errorMessages, ...warnings];
const output2 = supprimerLesEvenementsSansDate(familles); type FonctionNettoyage = (familles: Famille[]) => DonneesNettoyees;
messages = [...messages, ...output2.messages]; const fonctionsDeNettoyage: FonctionNettoyage[] = [
familles = output2.familles; supprimerLesEvenementsSansDate,
supprimerLesEvenementsHorsResisstance,
];
const output3 = supprimerLesEvenementsHorsResisstance(familles); for (const fn of fonctionsDeNettoyage) {
messages = [...messages, ...output3.messages]; const donneesNettoyees: DonneesNettoyees = fn.apply(null, [familles]);
familles = output3.familles; messages = [...messages, ...donneesNettoyees.messages];
familles = donneesNettoyees.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: [],
};
} }
}
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 { return {
familles: nettoyees, familles,
messages, messages,
}; };
} }

View File

@ -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: [],
};
}
}

View File

@ -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é`
);
}

View File

@ -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é`
);
}