Skip to content

Commit

Permalink
feat(data): add people presences
Browse files Browse the repository at this point in the history
  • Loading branch information
nfroidure committed Aug 22, 2023
1 parent b8678f7 commit f65d4a8
Show file tree
Hide file tree
Showing 48 changed files with 4,473 additions and 5 deletions.
126 changes: 126 additions & 0 deletions bin/presence.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import { join as pathJoin } from "node:path";
import { readFile, writeFile, readdir, access } from "node:fs/promises";
import { toASCIIString } from "../src/utils/ascii";
import type { Author } from "../src/utils/tribunes";
import type { PresenceItem } from "../src/utils/writters";

run();

async function run() {
const files = await readdir(pathJoin("sources", "presence"));

for (const file of files) {
console.warn(`➕ - Processing ${file}.`);

const [[, , ...dateHeaders], sources, ...rows] = (
await readFile(pathJoin("sources", "presence", file))
)
.toString()
.split(/\r?\n/)
.map((line) => line.trim())
.filter((id) => id)
.map((line) => line.split(",").map((cell) => cell.trim()));
const persons: Record<
Author["id"],
Pick<Author, "id" | "name"> & {
presences: (PartialPresence & { date: string })[];
}
> = {};

for (const row of rows) {
const [id, name, ...presencesCodes] = row;

console.warn(`➕ - Setting presence of ${name}.`);

persons[id] = {
id: toASCIIString(name),
name,
presences: presencesCodes
.filter((id) => id)
.map(parsePresenceCode)
.map((presence, index) => ({
date: dateHeaders[index].replace("'", "") + "T19:00:00Z",
...presence,
})),
};

try {
await access(
pathJoin("contents", "writters", `${persons[id].id}.json`)
);
} catch (err) {
console.warn(`🤷 - Cannot find ${name} in the writters.`);
throw err;
}
}

for (const personId of Object.keys(persons)) {
const presences: PresenceItem[] = persons[personId].presences.map(
(presence) =>
({
...presence,
...(presence.delegation
? {
delegation: {
id: persons[presence.delegation].id,
name: persons[presence.delegation].name,
},
}
: {}),
} as PresenceItem)
);

const writterData = JSON.parse(
(
await readFile(
pathJoin("contents", "writters", `${persons[personId].id}.json`)
)
).toString()
);

writterData.presences = writterData.presences || {};
writterData.presences[file.replace(/\.csv$/, "")] =
presences.sort(sortByDate);

await writeFile(
pathJoin("contents", "writters", `${persons[personId].id}.json`),
JSON.stringify(writterData, null, 2)
);
}
}
}

type PartialPresence = Omit<PresenceItem, "delegation" | "date"> & {
delegation?: number;
};

function parsePresenceCode(code: string): PartialPresence {
return {
present: code.replace(/[^PREABS]/g, "") === "PRE",
...(code.split(":")[1]
? { delegation: parseInt(code.split(":")[1], 10) }
: {}),
...(code.startsWith("-")
? {
arrivedLate: true,
}
: {}),
...(code.split(":")[0].endsWith("-")
? {
leftBeforeTheEnd: true,
}
: {}),
};
}

function sortByDate<T extends { date: string }>(
authorA: T,
authorB: T
): number {
if (Date.parse(authorA.date) < Date.parse(authorB.date)) {
return -1;
} else if (Date.parse(authorA.date) > Date.parse(authorB.date)) {
return 1;
}
return 0;
}
92 changes: 92 additions & 0 deletions contents/writters/agnes-dupuis.json
Original file line number Diff line number Diff line change
Expand Up @@ -375,5 +375,97 @@
}
}
}
},
"presences": {
"cm-douai": [
{
"date": "2020-11-13T19:00:00Z",
"present": true
},
{
"date": "2020-11-28T19:00:00Z",
"present": true
},
{
"date": "2020-12-11T19:00:00Z",
"present": true
},
{
"date": "2021-01-22T19:00:00Z",
"present": true
},
{
"date": "2021-02-19T19:00:00Z",
"present": true
},
{
"date": "2021-03-25T19:00:00Z",
"present": true
},
{
"date": "2021-04-23T19:00:00Z",
"present": true
},
{
"date": "2021-09-24T19:00:00Z",
"present": true
},
{
"date": "2021-10-22T19:00:00Z",
"present": true
},
{
"date": "2021-11-19T19:00:00Z",
"present": true
},
{
"date": "2022-07-08T19:00:00Z",
"present": true
},
{
"date": "2022-09-23T19:00:00Z",
"present": true
},
{
"date": "2022-10-21T19:00:00Z",
"present": true
},
{
"date": "2022-11-18T19:00:00Z",
"present": true
},
{
"date": "2022-12-16T19:00:00Z",
"present": true
},
{
"date": "2023-01-20T19:00:00Z",
"present": true
},
{
"date": "2023-02-10T19:00:00Z",
"present": true
},
{
"date": "2023-03-17T19:00:00Z",
"present": true
},
{
"date": "2023-04-07T19:00:00Z",
"present": true
},
{
"date": "2023-05-26T19:00:00Z",
"present": true
},
{
"date": "2023-06-09T19:00:00Z",
"present": true
},
{
"date": "2023-06-30T19:00:00Z",
"present": true
}
]
}
}
122 changes: 122 additions & 0 deletions contents/writters/anissa-bouchaboun.json
Original file line number Diff line number Diff line change
Expand Up @@ -331,5 +331,127 @@
}
}
}
},
"presences": {
"cm-douai": [
{
"date": "2020-11-13T19:00:00Z",
"present": true
},
{
"date": "2020-11-28T19:00:00Z",
"present": true
},
{
"date": "2020-12-11T19:00:00Z",
"present": false,
"delegation": {
"id": "coline-craeye",
"name": "Coline CRAEYE"
}
},
{
"date": "2021-01-22T19:00:00Z",
"present": true
},
{
"date": "2021-02-19T19:00:00Z",
"present": true
},
{
"date": "2021-03-25T19:00:00Z",
"present": true
},
{
"date": "2021-04-23T19:00:00Z",
"present": false,
"delegation": {
"id": "anne-colin",
"name": "Anne COLIN"
}
},
{
"date": "2021-09-24T19:00:00Z",
"present": true
},
{
"date": "2021-10-22T19:00:00Z",
"present": true
},
{
"date": "2021-11-19T19:00:00Z",
"present": true
},
{
"date": "2022-07-08T19:00:00Z",
"present": true
},
{
"date": "2022-09-23T19:00:00Z",
"present": false,
"delegation": {
"id": "chantal-rybak",
"name": "Chantal RYBAK"
}
},
{
"date": "2022-10-21T19:00:00Z",
"present": true
},
{
"date": "2022-11-18T19:00:00Z",
"present": true,
"arrivedLate": true
},
{
"date": "2022-12-16T19:00:00Z",
"present": true,
"arrivedLate": true
},
{
"date": "2023-01-20T19:00:00Z",
"present": false,
"delegation": {
"id": "coline-craeye",
"name": "Coline CRAEYE"
}
},
{
"date": "2023-02-10T19:00:00Z",
"present": true
},
{
"date": "2023-03-17T19:00:00Z",
"present": true
},
{
"date": "2023-04-07T19:00:00Z",
"present": false,
"delegation": {
"id": "coline-craeye",
"name": "Coline CRAEYE"
}
},
{
"date": "2023-05-26T19:00:00Z",
"present": false,
"delegation": {
"id": "xavier-thierry",
"name": "Xavier THIERRY"
}
},
{
"date": "2023-06-09T19:00:00Z",
"present": false,
"delegation": {
"id": "mohamed-felouki",
"name": "Mohamed FELOUKI"
}
},
{
"date": "2023-06-30T19:00:00Z",
"present": true
}
]
}
}
Loading

0 comments on commit f65d4a8

Please sign in to comment.