Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / voice_musiconhold / voice_musiconhold.controller.js
index 4336074..72f8b70 100644 (file)
@@ -1 +1,357 @@
-var _0x4c2f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x66\x73","\x72\x65\x6D\x6F\x76\x65","\x55\x70\x6C\x6F\x61\x64","\x66\x73\x2D\x65\x78\x74\x72\x61","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x69\x6E\x64\x65\x78","\x6E\x61\x6D\x65","\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x73\x6F\x72\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x46\x69\x6C\x65\x73","\x6C\x6F\x67","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x6A\x6F\x69\x6E","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x2E\x77\x61\x76","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x63\x6F\x70\x79\x53\x79\x6E\x63","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x73\x6F\x75\x6E\x64\x73","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x66\x69\x6C\x65\x73","\x72\x65\x61\x64\x64\x69\x72","\x64\x65\x6C\x65\x74\x65\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x2F","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x75\x6E\x6C\x69\x6E\x6B","\x6D\x6F\x68\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65","\x74\x68\x61\x74\x65\x72\x72\x6F\x72","\x46\x69\x6E\x64\x69\x6E\x67\x20\x61\x70\x70\x20\x72\x6F\x77\x2E\x2E\x2E\x2E\x2E","\x65\x72\x72\x6F\x72\x31","\x6C\x65\x6E\x67\x74\x68","\x65\x72\x72\x6F\x72\x32","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x4D\x4F\x48","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x6D\x6F\x68","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x66\x69\x6C\x65\x20\x65\x72\x72\x6F\x72","\x4D\x45\x53\x53\x41\x47\x45\x5F\x46\x49\x4C\x45\x5F\x43\x52\x45\x41\x54\x49\x4F\x4E\x5F\x45\x52\x52\x4F\x52","\x63\x6F\x6D\x6D\x69\x74","\x66\x69\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64","\x6D\x6B\x64\x69\x72","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x74\x72\x65\x61\x6D","\x65\x6E\x63\x6F\x64\x65"];_0x4c2f[0];var _=require(_0x4c2f[1]);var VoiceMusicOnHold=require(_0x4c2f[3])[_0x4c2f[2]];var fs=require(_0x4c2f[4]);var remove=require(_0x4c2f[5]);var Upload=require(_0x4c2f[3])[_0x4c2f[6]];var fse=require(_0x4c2f[7]);var path=require(_0x4c2f[8]);var config=require(_0x4c2f[9]);var sequelize=require(_0x4c2f[3])[_0x4c2f[10]];var util=require(_0x4c2f[11]);var base64=require(_0x4c2f[12]);exports[_0x4c2f[13]]=function(_0xe7adxc,_0xe7adxd){var _0xe7adxe=[_0x4c2f[14],_0x4c2f[15],_0x4c2f[16],_0x4c2f[17]];var _0xe7adxf=_0xe7adxc[_0x4c2f[19]][_0x4c2f[18]]?parseInt(_0xe7adxc[_0x4c2f[19]][_0x4c2f[18]],10):100;var _0xe7adx10=_0xe7adxc[_0x4c2f[19]][_0x4c2f[20]]?parseInt(_0xe7adxc[_0x4c2f[19]][_0x4c2f[20]],10):0;var _0xe7adx11={where:{},limit:_0xe7adxf,offset:_0xe7adx10*_0xe7adxf};_[_0x4c2f[34]](_0xe7adxc[_0x4c2f[19]],function(_0xe7adx12,_0xe7adx13){switch(_0xe7adx13){case _0x4c2f[18]:;case _0x4c2f[20]:break ;;case _0x4c2f[23]:_0xe7adx11[_0x4c2f[21]]=util[_0x4c2f[26]](_0x4c2f[22],_0xe7adxc[_0x4c2f[19]][_0x4c2f[23]],_0xe7adxc[_0x4c2f[19]][_0x4c2f[24]]||_0x4c2f[25])||null;break ;;case _0x4c2f[24]:break ;;case _0x4c2f[32]:_0xe7adx11[_0x4c2f[28]][_0x4c2f[27]]=[];_0xe7adxe[_0x4c2f[31]](function(_0xe7adx14){var _0xe7adx15={};_0xe7adx15[_0xe7adx14]={$like:_0x4c2f[29]+_0xe7adx12+_0x4c2f[29]};_0xe7adx11[_0x4c2f[28]][_0x4c2f[27]][_0x4c2f[30]](_0xe7adx15);});break ;;default:_0xe7adx11[_0x4c2f[28]][_0xe7adx13]={$like:{}};_0xe7adx11[_0x4c2f[28]][_0xe7adx13][_0x4c2f[33]]=_0x4c2f[29]+_0xe7adx12+_0x4c2f[29];;}});VoiceMusicOnHold[_0x4c2f[48]](_0xe7adx11)[_0x4c2f[47]](function(_0xe7adx17){var _0xe7adx18=Math[_0x4c2f[37]](_0xe7adx17[_0x4c2f[36]]/_0xe7adxf);var _0xe7adx19=_0xe7adx18>(_0xe7adx11[_0x4c2f[38]]+1)?util[_0x4c2f[26]](_0x4c2f[39],_0xe7adxc[_0x4c2f[40]],_0xe7adxc[_0x4c2f[42]][_0x4c2f[41]],_0xe7adxc[_0x4c2f[43]],_0xe7adx10+1):null;var _0xe7adx1a=_0xe7adx10>0?util[_0x4c2f[26]](_0x4c2f[39],_0xe7adxc[_0x4c2f[40]],_0xe7adxc[_0x4c2f[42]][_0x4c2f[41]],_0xe7adxc[_0x4c2f[43]],_0xe7adx10-1):null;_0xe7adxd[_0x4c2f[46]](200)[_0x4c2f[45]]({count:_0xe7adx17[_0x4c2f[36]],rows:_0xe7adx17[_0x4c2f[44]],next_page:_0xe7adx19,previous_page:_0xe7adx1a,total_pages:_0xe7adx18});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)});};exports[_0x4c2f[49]]=function(_0xe7adxc,_0xe7adxd){VoiceMusicOnHold[_0x4c2f[53]](_0xe7adxc[_0x4c2f[52]][_0x4c2f[51]])[_0x4c2f[47]](function(_0xe7adx1b){if(!_0xe7adx1b){return _0xe7adxd[_0x4c2f[50]](404)};return _0xe7adxd[_0x4c2f[45]](_0xe7adx1b);})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)})};exports[_0x4c2f[54]]=function(_0xe7adxc,_0xe7adxd){VoiceMusicOnHold[_0x4c2f[53]](_0xe7adxc[_0x4c2f[52]][_0x4c2f[51]])[_0x4c2f[47]](function(_0xe7adx1b){if(!_0xe7adx1b){return _0xe7adxd[_0x4c2f[50]](404)};Upload[_0x4c2f[67]]({where:{id:_0xe7adxc[_0x4c2f[66]][_0x4c2f[65]]}})[_0x4c2f[47]](function(_0xe7adx1c){var _0xe7adx1d=path[_0x4c2f[58]](config[_0x4c2f[56]],_0x4c2f[57]);var _0xe7adx1e;_0xe7adx1c[_0x4c2f[31]](function(_0xe7adx1f){_0xe7adx1e=path[_0x4c2f[58]](_0xe7adx1b[_0x4c2f[15]],_0xe7adx1f[_0x4c2f[59]]+_0x4c2f[60]);fse[_0x4c2f[62]](path[_0x4c2f[58]](_0xe7adx1d,_0xe7adx1f[_0x4c2f[61]]+_0x4c2f[60]),_0xe7adx1e);});fs[_0x4c2f[64]](_0xe7adx1e,parseInt(_0x4c2f[63],8));_0xe7adxd[_0x4c2f[50]](200);})[_0x4c2f[35]](function(_0xe7adx16){console[_0x4c2f[55]](_0xe7adx16);return handleError(_0xe7adxd,_0xe7adx16);});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)})};exports[_0x4c2f[68]]=function(_0xe7adxc,_0xe7adxd){var _0xe7adx20={};VoiceMusicOnHold[_0x4c2f[53]](_0xe7adxc[_0x4c2f[52]][_0x4c2f[51]])[_0x4c2f[47]](function(_0xe7adx1b){if(!_0xe7adx1b){return _0xe7adxd[_0x4c2f[50]](404)};_0xe7adx20[_0x4c2f[8]]=_0xe7adx1b[_0x4c2f[15]];fs[_0x4c2f[70]](_0xe7adx1b[_0x4c2f[15]],function(_0xe7adx16,_0xe7adx21){if(!_0xe7adx16){_0xe7adx20[_0x4c2f[69]]=_0xe7adx21;return _0xe7adxd[_0x4c2f[45]](_0xe7adx20);}else {throw _0xe7adx16}});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)});};exports[_0x4c2f[71]]=function(_0xe7adxc,_0xe7adxd){VoiceMusicOnHold[_0x4c2f[53]](_0xe7adxc[_0x4c2f[52]][_0x4c2f[51]])[_0x4c2f[47]](function(_0xe7adx1b){if(!_0xe7adx1b){return _0xe7adxd[_0x4c2f[50]](404)};var _0xe7adx22=_0xe7adx1b[_0x4c2f[15]]+_0x4c2f[72]+_0xe7adxc[_0x4c2f[19]][_0x4c2f[73]];fs[_0x4c2f[74]](_0xe7adx22,function(_0xe7adx16){if(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)}else {return _0xe7adxd[_0x4c2f[50]](204)}});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)})};exports[_0x4c2f[75]]=function(_0xe7adxc,_0xe7adxd){console[_0x4c2f[55]](_0xe7adxc[_0x4c2f[66]]);VoiceMusicOnHold[_0x4c2f[67]]({where:{name:_0xe7adxc[_0x4c2f[66]][_0x4c2f[14]]}})[_0x4c2f[47]](function(_0xe7adx23){if(!_0xe7adx23){return _0xe7adxd[_0x4c2f[50]](404)};return _0xe7adxd[_0x4c2f[45]](_0xe7adx23);})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)});};exports[_0x4c2f[76]]=function(_0xe7adxc,_0xe7adxd){VoiceMusicOnHold[_0x4c2f[67]]({where:{name:_0xe7adxc[_0x4c2f[66]][_0x4c2f[14]]}})[_0x4c2f[47]](function(_0xe7adx24){console[_0x4c2f[55]](_0xe7adx24);console[_0x4c2f[55]](_0x4c2f[78]);if(!_0xe7adx24){console[_0x4c2f[55]](_0x4c2f[79]);return _0xe7adxd[_0x4c2f[50]](404);};if(_0xe7adx24[_0x4c2f[80]]>0){console[_0x4c2f[55]](_0x4c2f[81]);return _0xe7adxd[_0x4c2f[46]](500)[_0x4c2f[45]]({message:_0x4c2f[82]});};return sequelize[_0x4c2f[90]]()[_0x4c2f[47]](function(_0xe7adx25){_0xe7adxc[_0x4c2f[66]][_0x4c2f[15]]=path[_0x4c2f[58]](config[_0x4c2f[56]],_0x4c2f[83],_0xe7adxc[_0x4c2f[66]][_0x4c2f[14]]);return VoiceMusicOnHold[_0x4c2f[76]](_0xe7adxc[_0x4c2f[66]],{transaction:_0xe7adx25})[_0x4c2f[47]](function(_0xe7adx1b){fs[_0x4c2f[89]](_0xe7adx1b[_0x4c2f[15]],parseInt(_0x4c2f[63],8),function(_0xe7adx16){if(_0xe7adx16){console[_0x4c2f[55]](_0x4c2f[85]);_0xe7adx25[_0x4c2f[84]]();return _0xe7adxd[_0x4c2f[46]](500)[_0x4c2f[45]]({message:_0x4c2f[86]});};_0xe7adx25[_0x4c2f[87]]();console[_0x4c2f[55]](_0x4c2f[88]);return _0xe7adxd[_0x4c2f[46]](201)[_0x4c2f[45]](_0xe7adx1b);})})[_0x4c2f[35]](function(_0xe7adx16){_0xe7adx25[_0x4c2f[84]]()});});})[_0x4c2f[35]](function(_0xe7adx16){console[_0x4c2f[55]](_0x4c2f[77]);return handleError(_0xe7adxd,_0xe7adx16);})};exports[_0x4c2f[91]]=function(_0xe7adxc,_0xe7adxd){if(_0xe7adxc[_0x4c2f[66]][_0x4c2f[51]]){delete _0xe7adxc[_0x4c2f[66]][_0x4c2f[51]]};VoiceMusicOnHold[_0x4c2f[94]]({where:{id:_0xe7adxc[_0x4c2f[52]][_0x4c2f[51]]}})[_0x4c2f[47]](function(_0xe7adx1b){if(!_0xe7adx1b){return _0xe7adxd[_0x4c2f[50]](404)};var _0xe7adx26=_[_0x4c2f[92]](_0xe7adx1b,_0xe7adxc[_0x4c2f[66]]);_0xe7adx26[_0x4c2f[93]]()[_0x4c2f[47]](function(){return _0xe7adxd[_0x4c2f[46]](200)[_0x4c2f[45]](_0xe7adx1b)})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)});};exports[_0x4c2f[95]]=function(_0xe7adxc,_0xe7adxd){VoiceMusicOnHold[_0x4c2f[53]](_0xe7adxc[_0x4c2f[52]][_0x4c2f[51]])[_0x4c2f[47]](function(_0xe7adx1b){if(!_0xe7adx1b){return _0xe7adxd[_0x4c2f[50]](404)};return sequelize[_0x4c2f[90]](function(_0xe7adx25){return _0xe7adx1b[_0x4c2f[95]]({transaction:_0xe7adx25})[_0x4c2f[47]](function(){remove(_0xe7adx1b[_0x4c2f[15]],function(_0xe7adx16){if(_0xe7adx16){console[_0x4c2f[55]](_0xe7adx16)};return _0xe7adxd[_0x4c2f[50]](204);})})})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)})};exports[_0x4c2f[96]]=function(_0xe7adxc,_0xe7adxd){VoiceMusicOnHold[_0x4c2f[67]]({where:{id:_0xe7adxc[_0x4c2f[19]][_0x4c2f[51]]}})[_0x4c2f[47]](function(_0xe7adx27){if(!_0xe7adx27){return _0xe7adxd[_0x4c2f[50]](404)};return sequelize[_0x4c2f[90]](function(_0xe7adx25){_0xe7adx27[_0x4c2f[31]](function(_0xe7adx28){return _0xe7adx28[_0x4c2f[95]]({transaction:_0xe7adx25})[_0x4c2f[47]](function(){remove(_0xe7adx28[_0x4c2f[15]],function(_0xe7adx16){if(_0xe7adx16){console[_0x4c2f[55]](_0xe7adx16);throw _0xe7adx16;}})})})})[_0x4c2f[47]](function(){return _0xe7adxd[_0x4c2f[50]](204)})[_0x4c2f[35]](function(_0xe7adx16){console[_0x4c2f[55]](_0xe7adx16);return handleError(_0xe7adxd,_0xe7adx16);});})[_0x4c2f[35]](function(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)})};exports[_0x4c2f[97]]=function(_0xe7adxc,_0xe7adxd){var _0xe7adx29=decodeURI(_0xe7adxc[_0x4c2f[19]][_0x4c2f[8]]);base64[_0x4c2f[98]](_0xe7adx29,function(_0xe7adx16,_0xe7adx2a){if(_0xe7adx16){return handleError(_0xe7adxd,_0xe7adx16)}else {return _0xe7adxd[_0x4c2f[46]](200)[_0x4c2f[45]](_0xe7adx2a)}});};function handleError(_0xe7adxd,_0xe7adx16){return _0xe7adxd[_0x4c2f[46]](500)[_0x4c2f[45]](_0xe7adx16)}
\ No newline at end of file
+'use strict';
+
+var _ = require('lodash');
+var VoiceMusicOnHold = require('../../models').VoiceMusicOnHold;
+var fs = require('fs');
+var remove = require('remove');
+var Upload = require('../../models').Upload;
+var fse = require('fs-extra');
+var path = require('path');
+var config = require('../../config/environment');
+var sequelize = require('../../models').sequelize;
+var util = require('util');
+var base64 = require('file-base64');
+
+// Get list of voice_musiconholds
+exports.index = function(req, res) {
+
+  var attributes = ['name', 'directory', 'sort', 'description'];
+  var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
+  var page = req.query.page ? parseInt(req.query.page, 10) : 0;
+
+  var query = {
+    where: {},
+    limit: per_page,
+    offset: page * per_page
+  };
+
+  _.forIn(req.query, function(value, key) {
+    switch (key) {
+      case 'per_page':
+      case 'page':
+        break;
+      case 'sort_by':
+        query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
+        break;
+      case 'sort_order':
+        break;
+      case '$':
+        query.where.$or = [];
+        attributes.forEach(function(attribute) {
+          var tmp = {};
+          tmp[attribute] = {
+            $like: '%' + value + '%'
+          };
+
+          query.where.$or.push(tmp);
+        });
+        break;
+      default:
+        query.where[key] = {
+          $like: {}
+        };
+        query.where[key].$like = '%' + value + '%';
+    }
+  });
+
+
+  VoiceMusicOnHold
+    .findAndCountAll(query)
+    .then(function(result) {
+      var total_pages = Math.ceil(result.count / per_page);
+      var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
+      var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
+
+      res.status(200).send({
+        count: result.count,
+        rows: result.rows,
+        next_page: next_page,
+        previous_page: previous_page,
+        total_pages: total_pages
+      });
+
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Get a single voice_musiconhold
+exports.show = function(req, res) {
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voice_musiconhold) {
+      if (!voice_musiconhold) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_musiconhold);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Add files to moh class
+exports.addFiles = function(req, res) {
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voice_musiconhold) {
+      if (!voice_musiconhold) {
+        return res.sendStatus(404);
+      }
+      Upload
+        .findAll({
+          where: {
+            id: req.body.sounds
+          }
+        })
+        .then(function(soundFiles) {
+          var origin = path.join(config.root, 'server/files/sounds/converted');
+          var dest;
+          soundFiles.forEach(function(elem) {
+            dest = path.join(voice_musiconhold.directory, elem.display_name + '.wav');
+            fse.copySync(path.join(origin, elem.save_name + '.wav'), dest);
+          });
+          fs.chmodSync(dest, parseInt('0777', 8));
+          res.sendStatus(200);
+        })
+        .catch(function(err) {
+          console.log(err);
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.showAudioFiles = function(req, res) {
+  var fileObject = {};
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voice_musiconhold) {
+      if (!voice_musiconhold) {
+        return res.sendStatus(404);
+      }
+      fileObject.path = voice_musiconhold.directory;
+      fs.readdir(voice_musiconhold.directory, function(err, files) {
+        if (!err) {
+          fileObject.files = files;
+          return res.send(fileObject);
+        } else {
+          throw err;
+        }
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+exports.deleteAudioFiles = function(req, res) {
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voice_musiconhold) {
+      if (!voice_musiconhold) {
+        return res.sendStatus(404);
+      }
+      var deletePath = voice_musiconhold.directory + '/' + req.query.filename;
+      fs.unlink(deletePath, function(err) {
+        if (err) {
+          return handleError(res, err);
+        } else {
+          return res.sendStatus(204);
+        }
+      });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Validate the existence of a route
+exports.mohValidation = function(req, res) {
+  console.log(req.body);
+  VoiceMusicOnHold
+    .findAll({
+      where: {
+        name: req.body.name,
+      }
+    })
+    .then(function(voice_mohs) {
+      if (!voice_mohs) {
+        return res.sendStatus(404);
+      }
+      return res.send(voice_mohs);
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Creates a new voice_musiconhold in the DB.
+exports.create = function(req, res) {
+  VoiceMusicOnHold
+    .findAll({
+      where: {
+        name: req.body.name
+      }
+    })
+    .then(function(existingMohs) {
+      console.log(existingMohs);
+      console.log('Finding app row.....');
+      if (!existingMohs) {
+        console.log('error1');
+        return res.sendStatus(404);
+      }
+      if (existingMohs.length > 0) {
+        console.log('error2');
+        return res.status(500).send({
+          message: 'MESSAGE_EXIST_MOH'
+        });
+      }
+      return sequelize.transaction().then(function(t) {
+        req.body.directory = path.join(config.root, 'server/files/moh', req.body.name);
+        return VoiceMusicOnHold
+          .create(req.body, {
+            transaction: t
+          })
+          .then(function(voice_musiconhold) {
+            fs.mkdir(voice_musiconhold.directory, parseInt('0777', 8), function(err) {
+              if (err) {
+                console.log('file error');
+                t.rollback();
+                return res.status(500).send({
+                  message: 'MESSAGE_FILE_CREATION_ERROR'
+                });
+              }
+              t.commit();
+              console.log('file created');
+              return res.status(201).send(voice_musiconhold);
+            });
+          })
+          .catch(function(err) {
+            t.rollback();
+          });
+      })
+    })
+    .catch(function(err) {
+      console.log('thaterror');
+      return handleError(res, err);
+    });
+};
+
+// Updates an existing voice_musiconhold in the DB.
+exports.update = function(req, res) {
+  if (req.body.id) {
+    delete req.body.id;
+  }
+  VoiceMusicOnHold
+    .find({
+      where: {
+        id: req.params.id
+      }
+    })
+    .then(function(voice_musiconhold) {
+      if (!voice_musiconhold) {
+        return res.sendStatus(404);
+      }
+      var updated = _.merge(voice_musiconhold, req.body);
+      updated.save()
+        .then(function() {
+          return res.status(200).send(voice_musiconhold);
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes a voice_musiconhold from the DB.
+exports.destroy = function(req, res) {
+  VoiceMusicOnHold
+    .findById(req.params.id)
+    .then(function(voice_musiconhold) {
+      if (!voice_musiconhold) {
+        return res.sendStatus(404);
+      }
+      return sequelize.transaction(function(t) {
+          return voice_musiconhold.destroy({
+              transaction: t
+            })
+            .then(function() {
+              remove(voice_musiconhold.directory, function(err) {
+                if (err) {
+                  console.log(err);
+                }
+                return res.sendStatus(204);
+              });
+            })
+        })
+        .catch(function(err) {
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// Deletes multiple voice_musiconholds from the DB.
+exports.bulkDestroy = function(req, res) {
+  VoiceMusicOnHold
+    .findAll({
+      where: {
+        id: req.query.id
+      }
+    })
+    .then(function(voice_musiconholds) {
+      if (!voice_musiconholds) {
+        return res.sendStatus(404);
+      }
+      return sequelize.transaction(function(t) {
+          voice_musiconholds.forEach(function(element) {
+            return element.destroy({
+                transaction: t
+              })
+              .then(function() {
+                remove(element.directory, function(err) {
+                  if (err) {
+                    console.log(err);
+                    throw err
+                  }
+                });
+              })
+          })
+        })
+        .then(function() {
+          return res.sendStatus(204);
+        })
+        .catch(function(err) {
+          console.log(err);
+          return handleError(res, err);
+        });
+    })
+    .catch(function(err) {
+      return handleError(res, err);
+    });
+};
+
+// stream a moh file
+exports.stream = function(req, res) {
+  var filepath = decodeURI(req.query.path);
+  base64.encode(filepath, function(err, base64String) {
+    if (err) {
+      return handleError(res, err);
+    } else {
+      return res.status(200).send(base64String);
+    }
+  });
+};
+
+function handleError(res, err) {
+  return res.status(500).send(err);
+}