import r from 'rethinkdb';
import config from './server/api/config.json';

let DATABASE = config.db || 'pulse';
let TABLE = 'pulses';


r.connect(config)
.then(conn => {
  return getDbList(conn)
  .then((list) => {
    return dropDbIfExists(conn, list)
    .then(() => {
      return createDatabase(conn);
    })
    .then(() => {
      return createTable(conn);
    })
    .then(() => {
      return closeConnection(conn);
    });
  })
});


function getDbList(conn) {
  return r.dbList().run(conn);
}

function dropDbIfExists(conn, dbList) {
  if(dbList.indexOf(DATABASE) >= 0) {
      console.log(' [-] Drop Database...');
      return r.dbDrop(DATABASE).run(conn);
  } else {
      return Promise.resolve(true);
  }
}

function createDatabase(conn) {
  console.log(' [-] Create Database');
  return r.dbCreate(DATABASE).run(conn);
}

function createTable(conn) {
  console.log(' [-] Create Table');
  return r.db(DATABASE).tableCreate(TABLE).run(conn);
}

function closeConnection(conn) {
  console.log(' [-] Close connection!');
  return conn.close();
}
@@ -118,19 +118,21 @@
 ABLE
+S
  = 
+%5B
 'pulses'
 ;%0A%0A%0A
@@ -127,18 +127,19 @@
 'pulses'
-;%0A
+%5D; 
 %0A%0Ar.conn
@@ -172,24 +172,72 @@
 %7B%0A  
-return getDbL
+console.log(' %5B-%5D Database Setup');%0A  return createDbIfNotEx
 ist
+s
 (con
@@ -252,38 +252,63 @@
 en((
-list) =%3E %7B%0A    return dropDbIf
+) =%3E Promise.all(TABLES.map((table) =%3E createTableIfNot
 Exis
@@ -320,16 +320,18 @@
 nn, 
-list
+table)))
 )%0A
-  
   .t
@@ -344,54 +344,98 @@
  =%3E 
-%7B%0A      return createDatabase
+closeConnection(conn));%0A%7D);%0A%0Afunction createDbIfNotExists
 (conn)
-;%0A    %7D)%0A  
+%7B%0A  return getDbList(conn)%0A
   .t
@@ -431,39 +431,83 @@
 (conn)%0A  .then((
+list
 ) =%3E %7B%0A
+    if(list.indexOf(DATABASE) === -1) %7B%0A
       return cre
@@ -505,28 +505,31 @@
 eturn create
-Tabl
+Databas
 e(conn);%0A   
@@ -534,69 +534,119 @@
    %7D
-)%0A    .then(() =%3E %7B%0A      return closeConnection(conn
+ else %7B%0A      console.log(' %5B!%5D Database already exists:', DATABASE);%0A      return Promise.resolve(true
 );%0A    %7D
 );%0A 
@@ -645,20 +645,16 @@
    %7D
-);
 %0A  %7D)
+;
 %0A%7D
-);%0A
 %0A%0Afu
@@ -660,30 +660,50 @@
 unction 
-getDbL
+createTableIfNotEx
 ist
+s
 (conn
+, table
 ) %7B%0A  re
@@ -711,81 +711,55 @@
 urn 
-r.dbList().run(conn);%0A%7D%0A%0Afunction dropDbIfExists(conn, dbL
+getTableList(conn)%0A  .then((l
 ist)
+ =%3E
  %7B%0A
+  
   if(
-dbL
+l
 ist.
@@ -770,23 +770,74 @@
 xOf(
-DATABASE) %3E= 0)
+table) === -1) %7B%0A      return createTable(conn, table);%0A    %7D else
  %7B%0A 
@@ -860,89 +860,185 @@
 (' %5B
--%5D Drop Database...');%0A      return r.dbDrop(DATABASE).run(conn);%0A  %7D else
+!%5D Table already exists:', table);%0A      return Promise.resolve(true);%0A    %7D%0A  %7D);%0A%7D%0A%0Afunction getDbList(conn) %7B%0A  return r.dbList().run(conn);%0A%7D%0A%0Afunction getTableList(conn)
  %7B%0A
-    
   re
@@ -1046,34 +1046,45 @@
 urn 
-Promise.resolve(true);%0A  %7D
+r.db(DATABASE).tableList().run(conn);
 %0A%7D%0A%0A
@@ -1150,17 +1150,28 @@
 Database
-'
+:', DATABASE
 );%0A  ret
@@ -1230,24 +1230,31 @@
 teTable(conn
+, table
 ) %7B%0A  consol
@@ -1277,17 +1277,25 @@
 te Table
-'
+:', table
 );%0A  ret
@@ -1325,21 +1325,21 @@
 eCreate(
-TABLE
+table
 ).run(co
@@ -1396,17 +1396,17 @@
 .log(' %5B
--
+x
 %5D Close 

Change behaviour of dbSetup so that it does not dropExisting DB