some improvements

This commit is contained in:
Thomas Ruoff
2022-10-26 22:24:39 +02:00
parent ff048bfb51
commit b30b4995cb
3 changed files with 16 additions and 27 deletions

View File

@@ -5,8 +5,11 @@ Beschenker. Zusätzlich wird die ganze Ziehung in `./picks.txt` abgelegt.
# Verwendung # Verwendung
Die Liste der Teilnehmer wird von `stdin` eingelesen und erwartet folgendes ```
Format pro Zeile. ./wichteln.js < people.txt
```
# Format Teilnehmerlisteneintrag
`<Name> <Email> <GroupId>` `<Name> <Email> <GroupId>`
@@ -17,3 +20,5 @@ Gezogen wird in der Reihenfolge der Input Liste. Wird `GroupId` verwendet, kann
es sein, dass für einen Teilnehmer kein _gültigen_ Wichtel mehr gibt. In diesem es sein, dass für einen Teilnehmer kein _gültigen_ Wichtel mehr gibt. In diesem
Fall wirft das Skript einfach einen Fehler. Versucht es einfach noch einmal, bis Fall wirft das Skript einfach einen Fehler. Versucht es einfach noch einmal, bis
ein gültige Ziehung gefunden wurde. ein gültige Ziehung gefunden wurde.

20
package-lock.json generated
View File

@@ -1,26 +1,8 @@
{ {
"name": "wichteln", "name": "wichteln",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 2, "lockfileVersion": 1,
"requires": true, "requires": true,
"packages": {
"": {
"name": "wichteln",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"nodemailer": "^4.7.0"
}
},
"node_modules/nodemailer": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz",
"integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==",
"engines": {
"node": ">=6.0.0"
}
}
},
"dependencies": { "dependencies": {
"nodemailer": { "nodemailer": {
"version": "4.7.0", "version": "4.7.0",

View File

@@ -20,8 +20,8 @@ function mail(email, name, pick) {
Du darfst dieses Jahr >> ${pick} << beschenken! Du darfst dieses Jahr >> ${pick} << beschenken!
Viele lieben Grüße Viele liebe Grüße
Dein treuer Weihnachtswichtel™ Dein Weihnachtswichtel™
` `
}, },
(err, info) => { (err, info) => {
@@ -59,7 +59,7 @@ const run = async () => {
throw new Error("input file empty"); throw new Error("input file empty");
} }
people.forEach(drawer => { people.forEach((drawer, index) => {
let picked; let picked;
let pickable = people.filter( let pickable = people.filter(
@@ -70,7 +70,7 @@ const run = async () => {
); );
if (pickable.length === 0) { if (pickable.length === 0) {
throw new Error("ohhh, noone left for ", drawer.name); throw new Error(`ohhh shoot. None left for ${drawer.name}. Just try to roll again...`);
} }
let pickIndex = Math.floor(Math.random() * pickable.length); let pickIndex = Math.floor(Math.random() * pickable.length);
@@ -78,16 +78,18 @@ const run = async () => {
pickable[pickIndex].picked = true; pickable[pickIndex].picked = true;
}); });
console.log('Yay, I could draw someone for everybody! Writing ./picks.txt');
fs.writeFileSync( fs.writeFileSync(
`./picks.txt`, `./picks.txt`,
people.map(({ name, pick }) => `${name} picked ${pick}`).join("\n") people.map(({ name, pick }) => `${name} picked ${pick}`).join("\n")
); );
if (!send) { if (!send) {
console.log("DryRun: did not send emails. To send pass --send option"); console.log("DRY RUN: did not send emails! To send pass --send option");
return; return;
} }
people.forEach(p => mail(p.email, p.name, p.pick)); people.forEach(p => mail(p.email, p.name, p.pick));
}; };
run(); run().catch((e) => console.error(`Error: ${e.message}`));