E.W.O. Next / All files / src/engine/Commands/tasks loadDatabase.ts

100% Statements 41/41
75% Branches 9/12
100% Functions 7/7
100% Lines 41/41

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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            4x 4x 4x       4x   4x   4x   4x   4x 1x     3x 3x   3x 1x 1x 1x 1x 1x     1x     1x     2x   1x 1x 1x 1x 1x 1x 1x 1x   1x       1x     1x 1x 1x   1x 1x   1x     1x       4x 2x   4x 2x  
/**
 * @module Engine.Commands.Tasks
 * Load a database file
 */
 
import { DatabaseSchema } from '@models';
import * as fs from 'fs';
import { List, Map } from 'immutable';
import * as path from 'path';
 
declare var __basedir;
 
const loadDatabase = <V>(databaseName: string, modelHydrater: (item: any, additionnalData?: any) => any, additionnalData?: any): Map<string, V> | List<V> => {
 
  const database = path.resolve(__basedir, process.env.SERVER_DATA, `${databaseName}.json`);
 
  console.log(`loading database ${database}`);
 
  const databaseExist = fs.existsSync(database);
 
  if (!databaseExist) {
    return List([]);
  }
 
  const data: DatabaseSchema = JSON.parse(fs.readFileSync(database, { encoding: 'utf8' }));
  let percentOld = -1;
 
  if (data.format === 'array') {
    const dataArray = (data.data as any[]).map((item, index, array) => {
      const percent = Math.floor(((index + 1) / array.length) * 100);
      Eif (percent !== percentOld) {
        console.log(`loading... ${percent}%`);
        percentOld = percent;
      }
 
      return modelHydrater(item, additionnalData);
    });
 
    return List(dataArray);
  }
 
  if (data.format === 'mapOfArray') {
 
    const mapOfArray = {};
    Object.keys(data.data).forEach((key: string) => {
      const current = data.data[key];
      mapOfArray[key] = List((current as any[]).map((item, index, array) => {
        const percent = Math.floor(((index + 1) / array.length) * 100);
        Eif (percent !== percentOld) {
          console.log(`loading... ${percent}%`);
          percentOld = percent;
        }
        return modelHydrater(item, additionnalData);
      }));
    });
 
    return Map(mapOfArray);
  }
 
  const map = {};
  Object.keys(data.data).forEach((key: string, index, array) => {
    const percent = Math.floor(((index + 1) / array.length) * 100);
 
    Eif (percent !== percentOld) {
      percentOld = percent;
    }
    map[key] = modelHydrater(data.data[key], additionnalData);
  });
 
  return Map(map);
 
};
 
export const loadDatabaseMap = <V>(databaseName: string, modelHydrater: (item: any, additionnalData?: any) => any, additionnalData?: any): Map<string, V> =>
  loadDatabase(databaseName, modelHydrater, additionnalData) as Map<string, V>;
 
export const loadDatabaseList = <V>(databaseName: string, modelHydrater: (item: any, additionnalData?: any) => any, additionnalData?: any): List<V> =>
  loadDatabase(databaseName, modelHydrater, additionnalData) as List<V>;