reports.js 2.4 KB

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