statistiques/src/notion/fetch/fetchFamiliesWithEventsFromNotion.ts

84 lines
2.8 KiB
TypeScript
Raw Normal View History

import { Client, isFullPage } from "@notionhq/client";
import { PageObjectResponse } from "@notionhq/client/build/src/api-endpoints";
import {
ContexteEntreeDC,
EvenementFamille,
Famille,
StatutFamille,
TypeEvenement,
} from "../../data/Famille";
2024-06-02 14:34:11 +02:00
import { datePropertyToDate } from "../utils/properties/datePropertyToDate";
import { relationPropertyToPageId } from "../utils/properties/relationPropertyToPageId";
import { selectPropertyToText } from "../utils/properties/selectPropertyToText";
2024-06-02 14:34:11 +02:00
import { statusPropertyToText } from "../utils/properties/statusPropertyToText";
import { titlePropertyToText } from "../utils/properties/titlePropertyToText";
2024-06-02 14:34:11 +02:00
import { queryAllDbResults } from "../utils/queryAllDbResults";
import { richTextPropertyToPlainText } from "../utils/text/richTextPropertyToPlainText";
2024-06-02 14:34:11 +02:00
export async function fetchFamiliesWithEventsFromNotion(
notionClient: Client
): Promise<Famille[]> {
2024-06-02 14:34:11 +02:00
const familiesDbId: string = "5b69e02b296d4a578f8c8ab7fe8b05da";
const familEventsDbId: string = "c4d434b4603c4481a4d445618ecdf999";
const eventPages = (
await queryAllDbResults(notionClient, {
database_id: familEventsDbId,
})
).filter(isFullPage);
const familyPages = (
await queryAllDbResults(notionClient, {
database_id: familiesDbId,
})
).filter(isFullPage);
const familyEvents = eventPages.map((pageObjectResponse) => {
return buildFamilyEvent(pageObjectResponse);
});
2024-06-02 14:34:11 +02:00
const families: Famille[] = await Promise.all(
familyPages.map((pageObjectResponse) => {
return buildFamily(pageObjectResponse, familyEvents);
2024-06-02 14:34:11 +02:00
})
);
return families;
}
function buildFamilyEvent(page: PageObjectResponse): EvenementFamille {
const pageProperties = page.properties;
const familyEvent: EvenementFamille = {
notionId: page.id,
Évènement: titlePropertyToText(pageProperties, "Évènement"),
Type: selectPropertyToText(pageProperties, "Type")! as TypeEvenement,
"Enfants concernés": richTextPropertyToPlainText(
pageProperties,
"Enfants concernés"
),
Date: datePropertyToDate(pageProperties, "Date"),
notionIdFamille: relationPropertyToPageId(pageProperties, "Famille")!,
};
return familyEvent;
}
function buildFamily(
page: PageObjectResponse,
familyEvents: EvenementFamille[]
): Famille {
2024-06-02 14:34:11 +02:00
const pageProperties = page.properties;
const family: Famille = {
2024-06-02 14:34:11 +02:00
notionId: page.id,
Titre: titlePropertyToText(pageProperties, ""),
Statut: statusPropertyToText(pageProperties, "Statut") as StatutFamille,
ContexteEntree: selectPropertyToText(
pageProperties,
"Contexte dentrée DC"
) as ContexteEntreeDC,
Integration: datePropertyToDate(pageProperties, "Intégration"),
Sortie: datePropertyToDate(pageProperties, "Sortie"),
Evenements: familyEvents.filter((fe) => fe.notionIdFamille === page.id),
2024-06-02 14:34:11 +02:00
};
return family;
}