mirror of
https://framagit.org/enfance-libre/statistiques
synced 2025-12-07 13:53:45 +00:00
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
|
|
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;
|
||
|
|
}
|