3 var _ = require('lodash');
4 var VoiceVoicemail = require('../../models').VoiceVoicemail;
5 var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages;
6 var stream = require('stream');
8 // Get list of voice_voicemails
9 exports.index = function(req, res) {
11 var attributes = ['mailbox', 'fullname', 'email'];
12 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
13 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
18 offset: page * per_page
21 _.forIn(req.query, function(value, key) {
27 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
33 attributes.forEach(function(attribute) {
36 $like: '%' + value + '%'
39 query.where.$or.push(tmp);
46 query.where[key].$like = '%' + value + '%';
52 .findAndCountAll(query)
53 .then(function(voice_voicemails) {
54 return res.status(200).send(voice_voicemails);
56 .catch(function(err) {
57 return handleError(res, err);
61 // Get a single voice_voicemail
62 exports.show = function(req, res) {
66 uniqueid: req.params.uniqueid
69 .then(function(voice_voicemail) {
70 if (!voice_voicemail) {
71 return res.sendStatus(404);
73 return res.send(voice_voicemail);
75 .catch(function(err) {
76 return handleError(res, err);
80 exports.getMessages = function(req, res) {
84 uniqueid: req.params.uniqueid
87 .then(function(voice_voicemail) {
88 VoiceVoicemailMessages
91 mailboxcontext: voice_voicemail.context,
92 mailboxuser: voice_voicemail.mailbox
95 .then(function(voicemailMessages) {
96 return res.status(200).send(voicemailMessages);
98 .catch(function(err) {
99 return handleError(res, err);
102 .catch(function(err) {
103 return handleError(res, err);
107 // validate mailbox uniqueness
108 exports.mailboxValidation = function(req, res) {
109 console.log(req.body);
113 mailbox: req.body.mailbox,
114 context: req.body.context
117 .then(function(voicemails) {
119 return res.sendStatus(404);
121 return res.send(voicemails);
123 .catch(function(err) {
124 return handleError(res, err);
127 // Creates a new voice_voicemail in the DB.
128 exports.create = function(req, res) {
132 mailbox: req.body.mailbox,
133 context: req.body.context
136 .then(function(voicemails) {
138 return res.sendStatus(404);
140 if (voicemails.length > 0) {
141 return res.status(500).send({
142 message: 'MESSAGE_EXIST_MAILBOX'
147 .then(function(voice_voicemail) {
148 return res.status(201).send(voice_voicemail);
150 .catch(function(err) {
151 return handleError(res, err);
153 .catch(function(err) {
154 return handleError(res, err);
159 // Updates an existing voice_voicemail in the DB.
160 exports.update = function(req, res) {
164 mailbox: req.body.mailbox,
165 context: req.body.context,
167 $ne: req.body.uniqueid
171 .then(function(voicemails) {
173 return res.sendStatus(404);
175 if (voicemails.length > 0) {
176 return res.status(500).send({
177 message: 'MESSAGE_EXIST_MAILBOX'
180 if (req.body.uniqueid) {
181 delete req.body.uniqueid;
186 uniqueid: req.params.uniqueid
189 .then(function(voice_voicemail) {
190 if (!voice_voicemail) {
191 return res.sendStatus(404);
193 var updated = _.merge(voice_voicemail, req.body);
196 return res.status(200).send(voice_voicemail);
198 .catch(function(err) {
199 return handleError(res, err);
202 .catch(function(err) {
203 return handleError(res, err);
206 .catch(function(err) {
207 return handleError(res, err);
212 // Deletes a voice_voicemail from the DB.
213 exports.destroy = function(req, res) {
217 uniqueid: req.params.uniqueid
220 .then(function(voice_voicemail) {
221 if (!voice_voicemail) {
222 return res.sendStatus(404);
224 voice_voicemail.destroy()
226 return res.sendStatus(204);
228 .catch(function(err) {
229 return handleError(res, err);
232 .catch(function(err) {
233 return handleError(res, err);
237 // Deletes a voice_voicemail from the DB.
238 exports.bulkDestroy = function(req, res) {
242 uniqueid: req.query.uniqueid
244 individualHooks: true
247 return res.sendStatus(204);
249 .catch(function(err) {
250 return handleError(res, err);
254 // Deletes a voice_voicemail message from the DB.
255 exports.destroyMessage = function(req, res) {
256 VoiceVoicemailMessages
257 .findById(req.params.id)
258 .then(function(voicemailMessage) {
259 if (!voicemailMessage) {
260 return res.sendStatus(404);
262 voicemailMessage.recording = null;
263 voicemailMessage.destroy()
265 return res.sendStatus(204);
267 .catch(function(err) {
268 return handleError(res, err);
271 .catch(function(err) {
272 return handleError(res, err);
276 exports.downloadMessage = function(req, res) {
277 VoiceVoicemailMessages
278 .findById(req.params.id)
279 .then(function(message) {
281 return res.sendStatus(404);
283 var filename = message.msg_id + '.wav';
284 res.writeHead(200, "OK", {
285 "Content-Type": "audio/wav",
286 "Content-Disposition": "attachment; filename=" + filename,
287 "Content-Length": message.recording.length
289 var bufferStream = new stream.PassThrough();
290 bufferStream.end(new Buffer(message.recording));
291 bufferStream.pipe(res)
296 function handleError(res, err) {
297 return res.status(500).send(err);