news.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. cache.sub('news.remove', news => {
  16. utils.socketsFromUser(news.createdBy, sockets => {
  17. sockets.forEach(socket => {
  18. socket.emit('event:admin.news.removed', news);
  19. });
  20. });
  21. });
  22. cache.sub('news.update', news => {
  23. utils.socketsFromUser(news.createdBy, sockets => {
  24. sockets.forEach(socket => {
  25. socket.emit('event:admin.news.updated', news);
  26. });
  27. });
  28. });
  29. module.exports = {
  30. index: (session, cb) => {
  31. async.waterfall([
  32. (next) => {
  33. db.models.news.find({}).sort({ createdAt: 'desc' }).exec(next);
  34. }
  35. ], (err, news) => {
  36. if (err) {
  37. logger.log("NEWS_INDEX", "ERROR", `Indexing news failed. "${err.message}"`);
  38. return cb({status: 'failure', message: 'Something went wrong.'});
  39. }
  40. logger.log("NEWS_INDEX", "SUCCESS", `Indexing news successful.`);
  41. return cb({ status: 'success', data: news });
  42. });
  43. },
  44. create: hooks.adminRequired((session, data, cb, userId) => {
  45. async.waterfall([
  46. (next) => {
  47. data.createdBy = userId;
  48. data.createdAt = Date.now();
  49. db.models.news.create(data, next);
  50. }
  51. ], (err, news) => {
  52. if (err) {
  53. logger.log("NEWS_CREATE", "ERROR", `Creating news failed. "${err.message}"`);
  54. return cb({ 'status': 'failure', 'message': 'Something went wrong' });
  55. } else {
  56. cache.pub('news.create', news);
  57. logger.log("NEWS_CREATE", "SUCCESS", `Creating news successful.`);
  58. return cb({ 'status': 'success', 'message': 'Successfully created News' });
  59. }
  60. });
  61. }),
  62. remove: hooks.adminRequired((session, news, cb, userId) => {
  63. db.models.news.remove({ _id: news._id }, err => {
  64. if (err) {
  65. logger.log("NEWS_REMOVE", "ERROR", `Creating news failed. "${err.message}"`);
  66. return cb({ 'status': 'failure', 'message': 'Something went wrong' });
  67. } else {
  68. cache.pub('news.remove', news);
  69. logger.log("NEWS_REMOVE", "SUCCESS", `Removing news successful.`);
  70. return cb({ 'status': 'success', 'message': 'Successfully removed News' });
  71. }
  72. });
  73. }),
  74. update: hooks.adminRequired((session, _id, news, cb, userId) => {
  75. db.models.news.update({ _id }, news, { upsert: true }, err => {
  76. if (err) {
  77. logger.log("NEWS_UPDATE", "ERROR", `Updating news failed. "${err.message}"`);
  78. return cb({ 'status': 'failure', 'message': 'Something went wrong' });
  79. } else {
  80. cache.pub('news.update', news);
  81. logger.log("NEWS_UPDATE", "SUCCESS", `Updating news successful.`);
  82. return cb({ 'status': 'success', 'message': 'Successfully updated News' });
  83. }
  84. });
  85. }),
  86. newest: (session, cb) => {
  87. async.waterfall([
  88. (next) => {
  89. db.models.news.findOne({}).sort({ createdAt: 'desc' }).exec(next);
  90. }
  91. ], (err, news) => {
  92. if (err) {
  93. logger.log("NEWS_NEWEST", "ERROR", `Getting the latest news failed. "${err.message}"`);
  94. return cb({ 'status': 'failure', 'message': 'Something went wrong' });
  95. } else {
  96. logger.log("NEWS_NEWEST", "SUCCESS", `Successfully got the latest news.`);
  97. return cb({ status: 'success', data: news });
  98. }
  99. });
  100. }
  101. };