-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup.js
67 lines (63 loc) · 2.3 KB
/
setup.js
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
const r = require('root/lib/r');
const failCount = 0;
const checkConnection = () => {
return new Promise((resolve, reject) => {
const innerCheck = () => {
return r.dbList()
.then(() => {
resolve();
})
.catch(e => {
failCount = failCount++;
if (failCount > 1000) throw new Error('Too many connection failures');
setTimeout(innerCheck, 1000);
})
};
innerCheck();
});
};
module.exports = function setUp() {
return checkConnection()
.then(() => r.dbCreate(process.env.RETHINK_NAME).run())
.catch((err) => {
var arr = err.message.split('\n');
if (arr[0] === 'Database `'+process.env.RETHINK_NAME+'` already exists in:') return;
throw err;
})
.then(() => r.tableCreate('entities').run())
.catch((err) => {
if (err.message.split('\n')[0] === 'Table `'+process.env.RETHINK_NAME+'.entities` already exists in:') return;
throw err;
})
.then(() => r.table('entities').indexCreate('emails', { multi: true }).run())
.catch(err => {
if (err.message.indexOf('Index `emails` already exists') > -1 )return;
throw err;
})
.then(() => r.table('entities').indexWait('emails').run())
.then(() => r.table('entities').indexCreate('permissions', e => {
return e('permissions').map(p => [p('type'), p('entity')])
}, { multi: true }).run())
.catch(err => {
if (err.message.indexOf('Index `permissions` already exists') > -1 )return;
throw err;
})
.then(() => r.table('entities').indexWait('permissions').run())
.then(() => r.table('entities').indexCreate('inherited_permissions', e => {
return e('inherited_permissions').map(p => [p('type'), p('entity')])
}, { multi: true }).run())
.catch(err => {
if (err.message.indexOf('Index `inherited_permissions` already exists') > -1 )return;
throw err;
})
.then(() => r.table('entities').indexWait('inherited_permissions').run())
.then(() => r.table('entities').indexCreate('all_permissions', e => {
return e('permissions').map(p => [p('type'), p('entity')])
.add(e('inherited_permissions').map(p => [p('type'), p('entity')]));
}, { multi: true }).run())
.catch(err => {
if (err.message.indexOf('Index `all_permissions` already exists') > -1 )return;
throw err;
})
.then(() => r.table('entities').indexWait('all_permissions').run())
}