UNPKG

2.06 kBJavaScriptView Raw
1var async = require('async'),
2 db_helper = require('./connection'),
3 logger = require('./logger');
4
5
6var Saveable = function() {
7
8 this.beforeSaveFn = function () {};
9 this.afterSaveFn = function () {};
10
11 this.save = function (cb) {
12 var self = this,
13 db = db_helper.connection();
14
15
16 if (!cb) {
17 cb = function () {};
18 }
19
20 // this needs to be improved. It shouldn't know about runValidate
21 if (!self.runValidate(cb)) { return; }
22
23 self.dateCreated = self.dateCreated || new Date();
24 self.lastUpdated = new Date();
25
26 var id = self.id || self._id;
27
28 self.beforeSaveFn && self.beforeSaveFn(self);
29
30 logger.info("Saving %s",self);
31
32 var item = self.serialise();
33
34 db.save(id,item, function (err, res) {
35 if (err) {
36 dumpError(err);
37 return cb(err, null);
38 }
39
40 self.id = res.id || res._id;
41 self.rev = res.rev;
42
43 self.afterSaveFn && self.afterSaveFn(self)
44
45 cb(null, self);
46 });
47 };
48};
49
50var Removeable = function () {
51
52 this.beforeRemoveFn = function () {};
53 this.afterRemoveFn = function () {};
54
55 this.remove = function (cb) {
56 var self = this,
57 db = db_helper.connection();
58
59 self.beforeRemoveFn && self.beforeRemoveFn(self);
60
61 logger.info("Removing %s",self);
62 try {
63 db.remove(self.id,self.rev, function (err, res) {
64 if (err) {
65 return cb(err);
66 }
67
68 self.afterRemoveFn && self.afterRemoveFn(self)
69
70 cb(null);
71 });
72 } catch(ex) {
73 cb(ex);
74 };
75 };
76
77
78};
79
80
81
82function dumpError(err) {
83 if (typeof err === 'object') {
84 if (err.message) {
85 logger.error('\nMessage: ' + err.message)
86 }
87 if (err.stack) {
88 logger.error('\nStacktrace:')
89 logger.error('====================')
90 logger.error(err.stack);
91 }
92
93 if (err.error) {
94 //console.dir(err);
95 }
96 } else {
97 logger.error('dumpError :: argument is not an object');
98 }
99}
100
101module.exports.Saveable = Saveable;
102module.exports.Removeable = Removeable;
103
104