statistiques/src/notion/fetch/fetchContacts.ts

41 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-06-23 09:28:57 +02:00
import { Client, isFullPage } from "@notionhq/client";
import { Contact } from "../../data/Contact";
import { checkboxPropertyToBoolean } from "../utils/properties/checkboxPropertyToBoolean";
import { relationPropertyToPageId } from "../utils/properties/relationPropertyToPageId";
import { titlePropertyToText } from "../utils/properties/titlePropertyToText";
import { queryAllDbResults } from "../utils/queryAllDbResults";
import { contactsDbId } from "./dbIds";
export async function fetchContacts(
notionClient: Client,
cacheConfig: boolean | { ttl: number },
missions: Readonly<{
notionId: string;
Nom: string;
Equipe: string;
ContactsNotionIds: string[];
}>[]
) {
const contactPages = (
await queryAllDbResults(
notionClient,
{
database_id: contactsDbId,
},
{ cache: cacheConfig }
)
).filter(isFullPage);
const contacts: Contact[] = contactPages.map((page) => ({
notionId: page.id,
notionIdFamille: relationPropertyToPageId(page.properties, "Famille")!,
Nom: titlePropertyToText(page.properties, "Nom"),
AExercéUneMission: checkboxPropertyToBoolean(
page.properties,
"A exercé une mission"
),
Missions: missions.filter((m) => m.ContactsNotionIds.includes(page.id)),
}));
return contacts;
}