customFields.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. CustomFields = new Mongo.Collection('customFields');
  2. CustomFields.attachSchema(new SimpleSchema({
  3. boardId: {
  4. type: String,
  5. },
  6. name: {
  7. type: String,
  8. },
  9. type: {
  10. type: String,
  11. },
  12. showOnCard: {
  13. type: Boolean,
  14. }
  15. }));
  16. CustomFields.allow({
  17. insert(userId, doc) {
  18. return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
  19. },
  20. update(userId, doc) {
  21. return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
  22. },
  23. remove(userId, doc) {
  24. return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
  25. },
  26. fetch: ['userId', 'boardId'],
  27. });
  28. // not sure if we need this?
  29. //CustomFields.hookOptions.after.update = { fetchPrevious: false };
  30. function customFieldCreation(userId, doc){
  31. Activities.insert({
  32. userId,
  33. activityType: 'createCustomField',
  34. boardId: doc.boardId,
  35. customFieldId: doc._id,
  36. });
  37. }
  38. if (Meteor.isServer) {
  39. /*Meteor.startup(() => {
  40. CustomFields._collection._ensureIndex({ boardId: 1});
  41. });*/
  42. CustomFields.after.insert((userId, doc) => {
  43. customFieldCreation(userId, doc);
  44. });
  45. CustomFields.after.remove((userId, doc) => {
  46. Activities.remove({
  47. customFieldId: doc._id,
  48. });
  49. });
  50. }
  51. //CUSTOM FIELD REST API
  52. if (Meteor.isServer) {
  53. JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res, next) {
  54. Authentication.checkUserId( req.userId);
  55. const paramBoardId = req.params.boardId;
  56. JsonRoutes.sendResult(res, {
  57. code: 200,
  58. data: CustomFields.find({ boardId: paramBoardId })
  59. });
  60. });
  61. JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res, next) {
  62. Authentication.checkUserId( req.userId);
  63. const paramBoardId = req.params.boardId;
  64. const paramCustomFieldId = req.params.customFieldId;
  65. JsonRoutes.sendResult(res, {
  66. code: 200,
  67. data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }),
  68. });
  69. });
  70. JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res, next) {
  71. Authentication.checkUserId( req.userId);
  72. const paramBoardId = req.params.boardId;
  73. const id = CustomFields.direct.insert({
  74. name: req.body.name,
  75. type: req.body.type,
  76. showOnCard: req.body.showOnCard,
  77. boardId: paramBoardId,
  78. });
  79. const customField = CustomFields.findOne({_id: id, boardId: paramBoardId });
  80. customFieldCreation(req.body.authorId, customField);
  81. JsonRoutes.sendResult(res, {
  82. code: 200,
  83. data: {
  84. _id: id,
  85. },
  86. });
  87. });
  88. JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res, next) {
  89. Authentication.checkUserId( req.userId);
  90. const paramBoardId = req.params.boardId;
  91. const id = req.params.customFieldId;
  92. CustomFields.remove({ _id: id, boardId: paramBoardId });
  93. JsonRoutes.sendResult(res, {
  94. code: 200,
  95. data: {
  96. _id: id,
  97. },
  98. });
  99. });
  100. }