-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathknex-store.js
115 lines (87 loc) · 2.96 KB
/
knex-store.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/* jshint ignore:start */
var senecaStore = require('seneca/lib/store');
var uuid = require('node-uuid');
module.exports = function CreateStore(entity, queries) {
return function(opts) {
var seneca = this;
var storeOpts = {map:{}};
storeOpts.map[entity] = '*';
seneca.log.info('register store', entity);
var storeCmds = {
name: entity,
save: function (args, cb) {
var ent = args.ent;
var update = !!ent.id;
var query;
if (update) {
query = queries.update(args);
process.env.LOG_QUERY && console.log('entity.update', query.toString());
query.then(function(res) {
cb(null, ent);
}, function(err) {
seneca.log.error(err['routine'])
seneca.log.error(err.detail ? err.detail : err.message);
seneca.fail({code: 'update', start: args.meta$.start, store: 'knex-store'}, cb);
});
} else {
args.ent.id = args.ent.id$ || uuid();
var query = queries.insert(args);
process.env.LOG_QUERY && console.log('entity.insert', query.toString());
query.then(function(res) {
cb(null, args.ent);
}, function(err) {
seneca.log.error(err['routine'])
seneca.log.error(err.detail ? err.detail : err.message);
seneca.fail({code: 'save', start: args.meta$.start, store: 'knex-store'}, cb);
});
}
},
load: function (args, cb) {
var ent = args.ent;
var query = queries.load(args);
process.env.LOG_QUERY && console.log('entity.load', query.toString());
query.then(function(rows) {
seneca.log(args.tag$, 'load', ent);
if (rows && rows.length) {
ent.data$(rows[0]);
cb(null, ent);
} else {
cb(null, undefined);
}
}, function(err) {
seneca.log.error(err['routine'])
seneca.log.error(err.detail ? err.detail : err.message);
seneca.fail({code: 'load', start: args.meta$.start, store: 'knex-store'}, cb);
});
},
list: function (args, cb) {
var qent = args.qent;
var query = queries.list(args);
process.env.LOG_QUERY && console.log('entity.list', query.toString());
query.then(function(rows) {
var list = rows.map(function(row) { return qent.make$(row); });
seneca.log(args.tag$, 'list', list.length, list[0]);
cb(null, list);
}, function(err) {
seneca.log.error(err['routine'])
seneca.log.error(err.detail ? err.detail : err.message);
seneca.fail({code: 'list', start: args.meta$.start, store: 'knex-store'}, cb);
});
},
remove: function (args, cb) {
var query = queries.remove(args)
process.env.LOG_QUERY && console.log('entity.remove', query.toString());
query.then(function(res) {
var result = {rowCount: res};
cb(null, result);
seneca.log(args.tag$, 'remove', res.rowCount);
}, function(err) {
cb(err, undefined);
});
},
close: function (cb) { /* noop */ },
native: function (args, done) { done(null, queries); }
};
senecaStore.init(seneca, storeOpts, storeCmds);
};
};