import * as prompt from 'prompt-async'; import { v4 as uuid } from 'uuid'; import { secureHash } from './generate'; import { db } from './db'; const pr = async (message) => { const { test } = (await prompt.get({ properties: { test: { message, }, }, })); return test; }; export const initDB = async (init: boolean, reset: boolean): Promise => { prompt.start(); console.log('initialisiere Datenbank...'); const ed = db.getDB(); const colls = ['person','organizer','event','apparatus']; if (reset) { const test = await pr('Wirklich löschen? Bitte mit "JA!" bestätigen!'); if (test === 'JA!') { console.log('setze Collections zurück...'); await Promise.all(colls.map(c => new Promise(async (resolve) => { if (await ed.collection(c).findOne() !== null) { await new Promise(resolve2 => ed.collection(c).drop(resolve2)); } if (await ed.collection(`o_${c}`).findOne() !== null) { await new Promise(resolve2 => ed.collection(`o_${c}`).drop(resolve2)); } resolve(); }))); console.log(' Collections geleert!'); } } const collections: any[] = await new Promise(resolve => ed.listCollections().toArray((e, i) => resolve(i))); console.log('erstelle Collections...'); colls.forEach(c => { if (!collections.find(C => C.name === c)) { ed.createCollection(c); } if (!collections.find(C => C.name === `o_${c}`)) { ed.createCollection(`o_${c}`); } }); console.log(' Collections erstellt!'); console.log('Überprüfe auf Master-Zugänge...'); const master = await db.fetch('person', {'master': true}) console.log(` ${master.length} Zugänge gefunden`); if (init) { const anlegen = await pr(' Weiterer Zugang anlegen? (y/j)'); if (['y', 'j', 'yes', 'ja'].find(t => t === anlegen.toLowerCase())) { const email = await pr(' neue E-Mail-Adresse eingeben'); const passwort = await pr(' neues Passwort eingeben'); const hash = await secureHash(passwort); const neu = { _id: uuid(), givenName: 'AAA_MASTER', familyName: 'AAA_MASTER', passwort: hash, email: email, master: true, }; db.insert('person', neu, null).then() console.log(' Nutzer angelegt!'); } } console.log('Datenbank bereit!'); }