Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.24 KB | None | 0 0
  1. var requestsDB = require('../../api/services/requestsDB.js');
  2. var db = require('../../libs/mongoose.js');
  3. var _ = require('lodash');
  4. var async = require('async');
  5. var CommonFunctions = require('../../api/services/CommonFunctions.js');
  6.  
  7. module.exports = {
  8. createAdvert: createAdvert,
  9. getAdverts: getAdverts,
  10. getAdvert: getAdvert
  11. }
  12.  
  13. function createAdvert (req, res) {
  14. var reqFieldsPresent = CommonFunctions.areKeysInObj(reqFields.createAdvert, req.body);
  15. if(reqFieldsPresent !== true) {
  16. sails.log.error({status:1, msg:reqFieldsPresent+' is missing'});
  17. return res.json({success:false, data:{status:1, msg:reqFieldsPresent+' is missing'}})
  18. }
  19.  
  20. var advert = _.cloneDeep(req.body);
  21.  
  22. async.auto({
  23. getNewSkills: function(cb) {
  24. var newSkills = [];
  25. console.log(req.body.skills);
  26. req.body.skills.forEach(function(skill) {
  27. if(skill.isNew) {
  28. newSkills.push(skill.name);
  29. }
  30. });
  31. cb(null, newSkills);
  32. },
  33. saveNewSkills: ['getNewSkills', function(cb, data) {
  34. if(data.getNewSkills.length == 0) {
  35. return cb(null);
  36. }
  37. async.each(data.getNewSkills, function(skill, callb) {
  38. requestsDB.findOne('Skill', {name: skill}, function (err, skillObj) {
  39. if (skillObj === null) {
  40. requestsDB.create('Skill', {name: skill}, function(err, response) {
  41. if (err) {
  42. return callb(err);
  43. }
  44. })
  45. }
  46. return callb();
  47. });
  48.  
  49. }, function(err) {
  50. if(err) {
  51. sails.log.error(err);
  52. return cb(err);
  53. }
  54. cb(null);
  55. })
  56. }],
  57. setSkillsArr: function(cb) {
  58. var skills = [];
  59. for (var i = 0, x = advert.skills.length; i < x; i++) {
  60. skills.push(advert.skills[i].name);
  61. };
  62. advert.skills = skills;
  63. return cb(null, skills);
  64. },
  65. getCompanyInfo: function (cb) {
  66. var findCriteria = {
  67. _id: req.body.company
  68. }
  69. requestsDB.findOne('Company', findCriteria, function(err,response){
  70. if (err) {
  71. sails.log.error(err);
  72. return res.json({success:false, data:{status:500, msg:'Error while finding company document'}})
  73. }
  74. if (response === null) {
  75. return res.json({success:false, data:{status:1, msg:'Company with such id is not found.'}})
  76. }
  77. var company = response;
  78. return cb(null, company);
  79. });
  80. },
  81. createAdvert: ['setSkillsArr','getCompanyInfo', function(cb, results) {
  82. advert.companyName = results.getCompanyInfo.name;
  83. requestsDB.create('Advert', advert, function(err, advert) {
  84. if (err) {
  85. sails.log.error(err);
  86. return res.json({success:false, data:{status:500, msg:'Error while creating advert document'}})
  87. }
  88. if (advert === null) {
  89. return res.json({success:false, data:{status:1, msg:'Advert not created'}})
  90. }
  91. cb(null, advert);
  92. })
  93. }]
  94. }, function(err, data) {
  95. if(err) {
  96. return res.json({success:false, msg: err})
  97. }
  98. return res.json({success:true, advertId: data.createAdvert.id})
  99. })
  100. }
  101.  
  102. function getAdverts(req, res) {
  103. var fields = _.pick(req.body, Fields.getAdverts.allowed);
  104. var reqFieldsPresent = CommonFunctions.areKeysInObj(Fields.getAdverts.required, fields);
  105. if(reqFieldsPresent !== true) {
  106. return res.json({success:false, msg:'[AdvertController getAdverts] Missed required field: '+reqFieldsPresent})
  107. }
  108.  
  109. var page = fields.page;
  110. var count = fields.count;
  111. delete fields.page;
  112. delete fields.count;
  113.  
  114. fields = _.forOwn(fields, function(value, key) {
  115. switch(key) {
  116. case 'cities':
  117. case 'skills':
  118. case 'paid':
  119. case 'needPay':
  120. case 'emplType':
  121. case 'hoursPerWeek':
  122. case 'subcategory':
  123. if(value.length == 0) {
  124. delete fields[key];
  125. } else {
  126. fields[key] = {$in:value};
  127. }
  128. }
  129. })
  130.  
  131. db['Advert'].find(fields).skip((page-1)*count).limit(count).exec(function(err, response){
  132. if (err) {
  133. res.json({success:false, msg:'[requestsDB service] find error'})
  134. return;
  135. }
  136. return res.json({success:true, data:response})
  137. })
  138. }
  139.  
  140. function getAdvert (req, res) {
  141. if(!req.params.advertId) {
  142. return res.json({success:false, msg: 'Advert id is not specified'})
  143. }
  144.  
  145. async.waterfall([
  146. function (callback) {
  147. requestsDB.findOne('Advert', {'_id': req.params.advertId}, function(err, response) {
  148. if (err) {
  149. return callback(err);
  150. }
  151. if (response === null){
  152. return callback({msg: 'No adverts found with specified id'});
  153. }
  154. if (!response.viewedNumber){
  155. response.viewedNumber = 1;
  156. } else {
  157. response.viewedNumber++;
  158. }
  159. response.save()
  160. callback(null, response);
  161. })
  162. },
  163. function (data, callback) {
  164. if (data.company) {
  165. requestsDB.findOne('Company', {'_id': data.company}, function (err, company) {
  166. if (err) {
  167. return callback(err);
  168. }
  169. if (company === null) {
  170. return callback({ msg: 'No company found with specified id'});
  171. }
  172. var newData = JSON.parse(JSON.stringify(data));
  173. newData['company'] = company;
  174. callback(null, newData);
  175. });
  176. }
  177. }],
  178. function (err, data) {
  179. if (err) {
  180. return res.badRequest(err);
  181. }
  182.  
  183. if (data === null) {
  184. return res.badRequest({message: 'data is null, check getAdvert'});
  185. }
  186. sails.log(data)
  187. res.json({success: true, data: data});
  188. });
  189. }
  190.  
  191. // fields, that are required for request. Should be for each function, and should have the same name
  192. var reqFields = {
  193. createAdvert: [
  194. 'company',
  195. 'category',
  196. 'subcategory',
  197. 'title',
  198. 'description',
  199. 'skills',
  200. 'cities',
  201. 'hoursPerWeek',
  202. 'paid',
  203. 'needPay',
  204. 'emplType',
  205. 'dateSelEnd'
  206. ]
  207. }
  208.  
  209. var Fields = {
  210. getAdverts: {
  211. allowed: [
  212. 'count',
  213. 'page',
  214. 'company',
  215. 'subcategory',
  216. 'hoursPerWeek',
  217. 'paid',
  218. 'needPay',
  219. 'emplType',
  220. 'cities',
  221. 'skills'
  222. ],
  223. required: [
  224. 'count',
  225. 'page'
  226. ]
  227. }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement