reports.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. 'use strict';
  2. const async = require('async');
  3. const db = require('../db');
  4. const hooks = require('./hooks');
  5. const songs = require('../songs');
  6. module.exports = {
  7. index: hooks.adminRequired((session, cb) => {
  8. db.models.report.find({ resolved: false }).sort({ released: 'desc' }).exec((err, reports) => {
  9. if (err) console.error(err);
  10. cb({ status: 'success', data: reports });
  11. });
  12. }),
  13. resolve: hooks.adminRequired((session, _id, cb) => {
  14. db.models.report.findOne({ _id }).sort({ released: 'desc' }).exec((err, report) => {
  15. if (err) console.error(err);
  16. report.resolved = true;
  17. report.save(err => {
  18. if (err) console.error(err);
  19. else cb({ status: 'success', message: 'Successfully resolved Report' });
  20. });
  21. });
  22. }),
  23. create: hooks.loginRequired((session, data, cb, userId) => {
  24. async.waterfall([
  25. (next) => {
  26. songs.getSong(data.songId, (err, song) => {
  27. if (err) return next(err);
  28. if (!song) return next('Song does not exist in our Database.');
  29. next();
  30. });
  31. },
  32. (next) => {
  33. let issues = [
  34. {
  35. name: 'Video',
  36. reasons: [
  37. 'Doesn\'t exist',
  38. 'It\'s private',
  39. 'It\'s not available in my country'
  40. ]
  41. },
  42. {
  43. name: 'Title',
  44. reasons: [
  45. 'Incorrect',
  46. 'Inappropriate'
  47. ]
  48. },
  49. {
  50. name: 'Duration',
  51. reasons: [
  52. 'Skips too soon',
  53. 'Skips too late',
  54. 'Starts too soon',
  55. 'Skips too late'
  56. ]
  57. },
  58. {
  59. name: 'Artists',
  60. reasons: [
  61. 'Incorrect',
  62. 'Inappropriate'
  63. ]
  64. },
  65. {
  66. name: 'Thumbnail',
  67. reasons: [
  68. 'Incorrect',
  69. 'Inappropriate',
  70. 'Doesn\'t exist'
  71. ]
  72. }
  73. ];
  74. for (let z = 0; z < data.issues.length; z++) {
  75. if (issues.filter(issue => { return issue.name == data.issues[z].name; }).length > 0) {
  76. for (let r = 0; r < issues.length; r++) {
  77. if (issues[r].reasons.every(reason => data.issues[z].reasons.indexOf(reason) < -1)) {
  78. return cb({ 'status': 'failure', 'message': 'Invalid data' });
  79. }
  80. }
  81. } else return cb({ 'status': 'failure', 'message': 'Invalid data' });
  82. }
  83. next();
  84. },
  85. (next) => {
  86. data.createdBy = userId;
  87. data.createdAt = Date.now();
  88. db.models.report.create(data, next);
  89. }
  90. ], err => {
  91. if (err) return cb({ 'status': 'failure', 'message': 'Something went wrong'});
  92. return cb({ 'status': 'success', 'message': 'Successfully created report' });
  93. });
  94. })
  95. };