1 | var async = require('async'),
|
2 | db_helper = require('./connection'),
|
3 | logger = require('./logger');
|
4 |
|
5 |
|
6 | var 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 |
|
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 |
|
50 | var 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 |
|
82 | function 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 |
|
95 | }
|
96 | } else {
|
97 | logger.error('dumpError :: argument is not an object');
|
98 | }
|
99 | }
|
100 |
|
101 | module.exports.Saveable = Saveable;
|
102 | module.exports.Removeable = Removeable;
|
103 |
|
104 |
|