-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdatabase-handler.js
More file actions
74 lines (47 loc) · 2.25 KB
/
Copy pathdatabase-handler.js
File metadata and controls
74 lines (47 loc) · 2.25 KB
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
const loki = require('lokijs');
const constants = require('./components/constants.js')
const fieldsDefinition = require('./components/constants')
class DatabaseHandler {
constructor(databaseName) {
this.db = new loki(databaseName);
this.historyData = this.db.addCollection('HistoryData', {indices: ["field"], ttl: constants.persistanceTimeout, ttlInterval: constants.cleanUpTimeout});
this.lastData = this.db.addCollection("LastData", {unique: ["field"], autoupdate: true});
this.field = this.db.addCollection("field", {unique: ["field"]});
let fields = Object.values(fieldsDefinition.fields);
this.field.insert(fields);
//transformando fields em uma array
let lastDataSk = fields.map(field => { return {field: field.index, value: null} });
this.lastData.insert(lastDataSk);
this.findFieldIdByIdAndPos = this.findFieldIdByIdAndPos.bind(this);
this.insertHistoryData = this.insertHistoryData.bind(this);
this.insertHistoryDataNoFieldId = this.insertHistoryDataNoFieldId.bind(this);
this.insertLastData = this.insertLastData.bind(this);
this.insertLastDataNoFieldId = this.insertLastDataNoFieldId.bind(this);
}
findFieldIdByIdAndPos(id, pos) {
return this.field.chain().find({id: id}).find({pos: pos}).data().index;
}
insertHistoryData(fieldId, value) {
this.historyData.insert({field: fieldId, value: value, timestamp: new Date().getTime()});
}
insertHistoryDataNoFieldId(id, pos, value) {
const fieldId = this.findFieldIdByIdAndPos(id, pos);
this.insertData(fieldId, value);
}
insertLastData(fieldId, value) {
var d = this.lastData.findOne({"field": fieldId});
d.value = value;
this.lastData.update(d);
}
insertLastDataNoFieldId(id, pos, value) {
const fieldId = this.findFieldIdByIdAndPos(id, pos);
this.insertLastData(fieldId, value);
}
retrieveLastData(fieldId) {
return this.lastData.findOne({field: fieldId}).value;
}
retrieveHistoryData(fieldId) {
return this.historyData.chain().find({field: fieldId}).data({removeMeta: true});
}
}
module.exports = DatabaseHandler;