UNPKG

3.79 kBJavaScriptView Raw
1var util = require('util')
2 , async = require('async')
3
4/**
5 * Crud helper lib
6 * @param Model
7 * @constructor
8 */
9var Helper = function(Model){
10 this.Model = Model
11}
12
13/**
14 * Model instance
15 * @type {null}
16 */
17Helper.prototype.Model = null
18
19/**
20 * Find rows based on criteria
21 * @param apx APX Instance
22 * @param req APX Request Object
23 * @param res APX Response Object
24 * @param next Continue callback
25 */
26Helper.prototype.find = function(apx,req,res,next){
27 this.Model.find(req.get(),function(err,results){
28 if(err) next(err)
29 else {
30 results.forEach(function(v,i,o){
31 o[i] = v.toJSON({virtuals: true})
32 })
33 res.success()
34 res.set('results',results)
35 next()
36 }
37 })
38}
39
40/**
41 * Find single row by criteria
42 * @param apx APX Instance
43 * @param req APX Request Object
44 * @param res APX Response Object
45 * @param next Continue callback
46 */
47Helper.prototype.findOne = function(apx,req,res,next){
48 this.Model.findOne(req.get(),function(err,result){
49 if(err) next(err)
50 else {
51 res.success()
52 res.set('result',result.toJSON({virtuals: true}))
53 next()
54 }
55 })
56}
57
58/**
59 * List rows and control filtering
60 * @param apx APX Instance
61 * @param req APX Request Object
62 * @param res APX Response Object
63 * @param next Continue callback
64 */
65Helper.prototype.list = function(apx,req,res,next){
66 var data = req.get() || {}
67 , search = {}
68 search.start = data.start || 0
69 search.limit = data.limit || 10
70 search.find = data.search || null
71 search.sort = data.sort || ''
72 this.Model.list(search,function(err,count,results){
73 if(err) next(err)
74 else {
75 results.forEach(function(v,i,o){
76 o[i] = v.toJSON({virtuals: true})
77 })
78 res.success()
79 res.set('count',count)
80 res.set('results',results)
81 next()
82 }
83 })
84}
85
86/**
87 * Save one or many rows and return the updated model
88 * @param apx APX Instance
89 * @param req APX Request Object
90 * @param res APX Response Object
91 * @param done Continue callback
92 */
93Helper.prototype.save = function(apx,req,res,done){
94 var self = this
95 var data = req.get()
96 if(0 === Object.keys(data).length) done('No parameters passed for save')
97 else {
98 var response = []
99 if(!util.isArray(data) && 'object' === typeof data)
100 data = [data]
101 async.each(
102 data,
103 function(v,next){
104 self.Model.findById(v._id ? v._id : v.id,function(err,row){
105 if(err)
106 next(err)
107 else {
108 if(null === row){
109 row = new self.Model(v)
110 } else {
111 row.merge(v)
112 }
113 row.save(function(err,result){
114 if(err)
115 next(err)
116 else {
117 response.push(result.toJSON({virtuals: true}))
118 next()
119 }
120 })
121 }
122 })
123 },
124 function(err){
125 if(err) res.error(err)
126 else {
127 res.success()
128 res.set('results',response)
129 }
130 done()
131 }
132 )
133 }
134}
135
136/**
137 * Remove one or many rows
138 * @param apx APX Instance
139 * @param req APX Request Object
140 * @param res APX Response Object
141 * @param done Continue callback
142 */
143Helper.prototype.remove = function(apx,req,res,done){
144 var self = this
145 var data = req.get()
146 if(0 === Object.keys(data).length) done('No parameters passed for remove')
147 else {
148 if('string' === typeof data || !util.isArray(data) && 'object' === typeof data)
149 data = [data]
150 async.each(
151 data,
152 function(v,next){
153 self.Model.remove(v,function(err){
154 next(err)
155 })
156 },
157 function(err){
158 if(err) done(err)
159 else {
160 res.success()
161 done()
162 }
163 }
164 )
165 }
166}
167
168module.exports = exports = Helper
\No newline at end of file