space_digest.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. "use strict";
  2. var config = require('config');
  3. require('../../models/db');
  4. var async = require('async');
  5. var fs = require('fs');
  6. var _ = require("underscore");
  7. var request = require('request');
  8. var url = require("url");
  9. var path = require("path");
  10. var crypto = require('crypto');
  11. var glob = require('glob');
  12. var gm = require('gm');
  13. var express = require('express');
  14. var router = express.Router({mergeParams: true});
  15. // JSON MAPPINGS
  16. var userMapping = {
  17. _id: 1,
  18. nickname: 1,
  19. email: 1,
  20. avatar_thumb_uri: 1
  21. };
  22. var spaceMapping = {
  23. _id: 1,
  24. name: 1,
  25. thumbnail_url: 1
  26. };
  27. var roleMapping = {
  28. "none": 0,
  29. "viewer": 1,
  30. "editor": 2,
  31. "admin": 3
  32. };
  33. router.get('/', function(req, res, next) {
  34. res.status(200).json([]);
  35. return;
  36. // FIXME TODO
  37. var showActionForSpaces = function(err, spaceIds) {
  38. var userMapping = {
  39. '_id': 1,
  40. 'nickname': 1,
  41. 'email': 1
  42. };
  43. var spaceMapping = {
  44. '_id': 1,
  45. 'name': 1
  46. };
  47. var d = new Date();
  48. d.setDate(d.getDate() - 1);
  49. Action
  50. .find({
  51. created_at: {
  52. "$gt": d
  53. },
  54. space: {
  55. "$in": spaceIds
  56. }
  57. })
  58. .populate('space', spaceMapping)
  59. .populate('user', userMapping)
  60. .exec(function(err, actions) {
  61. var groupedBySpaceEvents = _.groupBy(actions, function(action) {
  62. return action.space._id;
  63. });
  64. var events = _.map(groupedBySpaceEvents, function(value, key) {
  65. var sortByDate = _.sortBy(groupedBySpaceEvents[key], function(o) {
  66. return o.created_at;
  67. });
  68. var lastDate = sortByDate[sortByDate.length - 1].created_at;
  69. var users = groupedBySpaceEvents[key].map(function(action) {
  70. if (action.user) {
  71. if (action.user._id.equals(req.user._id)) {
  72. return "you";
  73. } else {
  74. return action.user.nickname;
  75. }
  76. }
  77. return action.editor_name;
  78. });
  79. var uniqueUsers = _.unique(users);
  80. return {
  81. space: value[0].space,
  82. users: uniqueUsers,
  83. last_action: lastDate
  84. };
  85. });
  86. var sortedEvents = _.sortBy(events, function(o) {
  87. return -o.last_action;
  88. });
  89. res.status(200).json(sortedEvents);
  90. });
  91. };
  92. if (!req.user) {
  93. res.status(403).json({
  94. error: "auth required"
  95. });
  96. } else {
  97. if (!req.space._id.equals(req.user.home_folder_id)) {
  98. Space.getRecursiveSubspacesForSpace(req.space, function(err, spaces) {
  99. showActionForSpaces(err, spaces.map(function(s) {
  100. return s._id;
  101. }));
  102. });
  103. } else {
  104. async.parallel({
  105. bycreator: function(cb) {
  106. Space.find({
  107. creator: req.user._id
  108. }, function(err, spaces) {
  109. cb(null, spaces.map(function(s) {
  110. return s._id;
  111. }));
  112. });
  113. },
  114. bymembership: function(cb) {
  115. Membership.find({
  116. user: req.user,
  117. space: {
  118. "$exists": 1
  119. }
  120. }).populate("space").exec(function(err, memberships) {
  121. async.map(memberships, function(membership, memcb) {
  122. Space.getRecursiveSubspacesForSpace(membership.space, function(err, spaces) {
  123. cb(null, spaces.map(function(s) {
  124. return s._id;
  125. }));
  126. });
  127. }, function(err, spaceArrays) {
  128. cb(null, spaceArrays.map(function(s) {
  129. return s._id;
  130. }));
  131. });
  132. });
  133. }
  134. }, function(err, results) {
  135. var spaceIds = _.unique(results.bycreator.concat(results.bymembership));
  136. showActionForSpaces(err, spaceIds);
  137. });
  138. }
  139. }
  140. });
  141. module.exports = router;