No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

86 líneas
2.3KB

  1. import * as prompt from 'prompt-async';
  2. import { v4 as uuid } from 'uuid';
  3. import { secureHash } from './generate';
  4. import { db } from './db';
  5. const pr = async (message) => {
  6. const { test } = (await prompt.get({
  7. properties: {
  8. test: {
  9. message,
  10. },
  11. },
  12. }));
  13. return test;
  14. };
  15. export const initDB = async (init: boolean, reset: boolean): Promise<void> => {
  16. prompt.start();
  17. console.log('initialisiere Datenbank...');
  18. const ed = db.getDB();
  19. const colls = ['person','organizer','event','apparatus'];
  20. if (reset) {
  21. const test = await pr('Wirklich löschen? Bitte mit "JA!" bestätigen!');
  22. if (test === 'JA!') {
  23. console.log('setze Collections zurück...');
  24. await Promise.all(colls.map(c => new Promise<void>(async (resolve) => {
  25. if (await ed.collection(c).findOne() !== null) {
  26. await new Promise(resolve2 => ed.collection(c).drop(resolve2));
  27. }
  28. if (await ed.collection(`o_${c}`).findOne() !== null) {
  29. await new Promise(resolve2 => ed.collection(`o_${c}`).drop(resolve2));
  30. }
  31. resolve();
  32. })));
  33. console.log(' Collections geleert!');
  34. }
  35. }
  36. const collections: any[] = await new Promise(resolve => ed.listCollections().toArray((e, i) => resolve(i)));
  37. console.log('erstelle Collections...');
  38. colls.forEach(c => {
  39. if (!collections.find(C => C.name === c)) {
  40. ed.createCollection(c);
  41. }
  42. if (!collections.find(C => C.name === `o_${c}`)) {
  43. ed.createCollection(`o_${c}`);
  44. }
  45. });
  46. console.log(' Collections erstellt!');
  47. console.log('Überprüfe auf Master-Zugänge...');
  48. const master = await db.fetch('person', {'master': true})
  49. console.log(` ${master.length} Zugänge gefunden`);
  50. if (init) {
  51. const anlegen = await pr(' Weiterer Zugang anlegen? (y/j)');
  52. if (['y', 'j', 'yes', 'ja'].find(t => t === anlegen.toLowerCase())) {
  53. const email = await pr(' neue E-Mail-Adresse eingeben');
  54. const passwort = await pr(' neues Passwort eingeben');
  55. const hash = await secureHash(passwort);
  56. const neu = {
  57. _id: uuid(),
  58. givenName: 'AAA_MASTER',
  59. familyName: 'AAA_MASTER',
  60. passwort: hash,
  61. email: email,
  62. master: true,
  63. };
  64. db.insert('person', neu, null).then()
  65. console.log(' Nutzer angelegt!');
  66. }
  67. }
  68. console.log('Datenbank bereit!');
  69. }