news.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. 'use strict';
  2. const async = require('async');
  3. const db = require('../db');
  4. const cache = require('../cache');
  5. const utils = require('../utils');
  6. const logger = require('../logger');
  7. const hooks = require('./hooks');
  8. cache.sub('news.create', news => {
  9. utils.socketsFromUser(news.createdBy, sockets => {
  10. sockets.forEach(socket => {
  11. socket.emit('event:admin.news.created', news);
  12. });
  13. });
  14. });
  15. module.exports = {
  16. index: (session, cb) => {
  17. async.waterfall([
  18. (next) => {
  19. db.models.news.find({}).sort({ createdAt: 'desc' }).exec(next);
  20. }
  21. ], (err, news) => {
  22. if (err) {
  23. logger.log("NEWS_INDEX", "ERROR", `Indexing news failed. "${err.message}"`);
  24. return cb({status: 'failure', message: 'Something went wrong.'});
  25. }
  26. logger.log("NEWS_INDEX", "SUCCESS", `Indexing news successful.`);
  27. return cb({ status: 'success', data: news });
  28. });
  29. },
  30. create: hooks.adminRequired((session, data, cb, userId) => {
  31. async.waterfall([
  32. (next) => {
  33. data.createdBy = userId;
  34. data.createdAt = Date.now();
  35. db.models.news.create(data, next);
  36. }
  37. ], (err, news) => {
  38. if (err) {
  39. logger.log("NEWS_CREATE", "ERROR", `Creating news failed. "${err.message}"`);
  40. return cb({ 'status': 'failure', 'message': 'Something went wrong' });
  41. } else {
  42. cache.pub('news.create', news);
  43. logger.log("NEWS_CREATE", "SUCCESS", `Creating news successful.`);
  44. return cb({ 'status': 'success', 'message': 'Successfully created News' });
  45. }
  46. });
  47. }),
  48. newest: (session, cb) => {
  49. async.waterfall([
  50. (next) => {
  51. db.models.news.findOne({}).sort({ createdAt: 'desc' }).exec(next);
  52. }
  53. ], (err, news) => {
  54. if (err) {
  55. logger.log("NEWS_NEWEST", "ERROR", `Getting the latest news failed. "${err.message}"`);
  56. return cb({ 'status': 'failure', 'message': 'Something went wrong' });
  57. } else {
  58. logger.log("NEWS_NEWEST", "SUCCESS", `Successfully got the latest news.`);
  59. return cb({ status: 'success', data: news });
  60. }
  61. });
  62. }
  63. };