-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenererVCard.js
More file actions
90 lines (73 loc) · 3.03 KB
/
Copy pathgenererVCard.js
File metadata and controls
90 lines (73 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import readline from "node:readline/promises";
import { stdin as input, stdout as output } from "node:process";
import path from "node:path";
import fs from "node:fs/promises";
import vCardJS from "vcards-js";
import ajoutAccount from "./ajoutAccount.js";
import { colors } from '../utils/colors.js';
export default async function genererVCard(rl = null) {
console.log("\n[actions] Génération d'un vCard...");
let ownRl = false;
if (!rl) {
rl = readline.createInterface({ input, output });
ownRl = true;
}
//veferication de l'etat du fichier des comptes
try {
const jsonFile = path.join(process.cwd(), "actions", "account.json");
let enseignants = [];
try {
const raw = await fs.readFile(jsonFile, "utf8");
enseignants = JSON.parse(raw);
} catch (err) {
console.error("Erreur lors de la lecture du fichier :", err.message);
return;
}
enseignants = enseignants.filter(e => e.role === "enseignant");
if (enseignants.length === 0) {
console.log("Aucun enseignant est trouvé dans le dossier courant.");
return;
}
console.log("\n Enseignants disponibles : \n");
enseignants.forEach((e, i) =>
console.log(`${i + 1}) ${e.prenom} ${e.nom}`)
);
console.log("\n Options : " +
"\n- Tapez un numéro pour générer le fichier vCard de l'enseignant sélectionné" +
"\n- Tapez a pour ajouter un enseignant au fichier" +
"\n- Tapez 'q' pour quitter");
const choice = await rl.question("\n Votre choix :");
if (choice.toLowerCase() === 'q') {
console.log("Vous quittez ce choix");
return;
}
if (choice.toLowerCase() === 'a') {
await ajoutAccount(rl);
return;
}
const index = parseInt(choice, 10) - 1;
if (!(index >= 0 && index < enseignants.length)) {
console.log(`${colors.red}Choix invalide.${colors.reset} Tapez 7 pour l'aide (enseignant) ou 3 pour l'aide (étudiant).`);
}
const selected = enseignants[index];
console.log(`\n Enseignant choisi : ${selected.nom}, ${selected.prenom}`);
const v = vCardJS();
v.version = "4.0";
v.firstName = selected.prenom;
v.lastName = selected.nom;
v.email = selected.email;
v.role = selected.role;
v.cellPhone = selected.telephone;
v.homeAddress.street = selected.adresse.rue;
v.homeAddress.city = selected.adresse.ville;
v.homeAddress.countryRegion = selected.adresse.region;
v.homeAddress.postalCode = selected.adresse.codePostal;
const dir = path.join(process.cwd(), "vcards");
await fs.mkdir(dir, { recursive: true });
const filePath = path.join(dir, `${selected.prenom}_${selected.nom}.vcf`);
v.saveToFile(filePath);
console.log(`\n Fichier enregistré dans ${filePath}`);
} finally {
if (ownRl && rl) rl.close();
}
}