| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | CustomFields = new Mongo.Collection('customFields');CustomFields.attachSchema(new SimpleSchema({  boardId: {    type: String,  },  name: {    type: String,  },  type: {    type: String,    allowedValues: ['text', 'number', 'date', 'dropdown'],  },  settings: {    type: Object,  },  'settings.dropdownItems': {    type: [Object],    optional: true,  },  'settings.dropdownItems.$': {    type: new SimpleSchema({      _id: {        type: String,      },      name: {        type: String,      },    }),  },  showOnCard: {    type: Boolean,  },}));CustomFields.allow({  insert(userId, doc) {    return allowIsBoardMember(userId, Boards.findOne(doc.boardId));  },  update(userId, doc) {    return allowIsBoardMember(userId, Boards.findOne(doc.boardId));  },  remove(userId, doc) {    return allowIsBoardMember(userId, Boards.findOne(doc.boardId));  },  fetch: ['userId', 'boardId'],});// not sure if we need this?//CustomFields.hookOptions.after.update = { fetchPrevious: false };function customFieldCreation(userId, doc){  Activities.insert({    userId,    activityType: 'createCustomField',    boardId: doc.boardId,    customFieldId: doc._id,  });}if (Meteor.isServer) {  /*Meteor.startup(() => {    CustomFields._collection._ensureIndex({ boardId: 1});  });*/  CustomFields.after.insert((userId, doc) => {    customFieldCreation(userId, doc);  });  CustomFields.after.remove((userId, doc) => {    Activities.remove({      customFieldId: doc._id,    });  });}//CUSTOM FIELD REST APIif (Meteor.isServer) {  JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields', function (req, res) {    Authentication.checkUserId( req.userId);    const paramBoardId = req.params.boardId;    JsonRoutes.sendResult(res, {      code: 200,      data: CustomFields.find({ boardId: paramBoardId }),    });  });  JsonRoutes.add('GET', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) {    Authentication.checkUserId( req.userId);    const paramBoardId = req.params.boardId;    const paramCustomFieldId = req.params.customFieldId;    JsonRoutes.sendResult(res, {      code: 200,      data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }),    });  });  JsonRoutes.add('POST', '/api/boards/:boardId/custom-fields', function (req, res) {    Authentication.checkUserId( req.userId);    const paramBoardId = req.params.boardId;    const id = CustomFields.direct.insert({      name: req.body.name,      type: req.body.type,      settings: req.body.settings,      showOnCard: req.body.showOnCard,      boardId: paramBoardId,    });    const customField = CustomFields.findOne({_id: id, boardId: paramBoardId });    customFieldCreation(req.body.authorId, customField);    JsonRoutes.sendResult(res, {      code: 200,      data: {        _id: id,      },    });  });  JsonRoutes.add('DELETE', '/api/boards/:boardId/custom-fields/:customFieldId', function (req, res) {    Authentication.checkUserId( req.userId);    const paramBoardId = req.params.boardId;    const id = req.params.customFieldId;    CustomFields.remove({ _id: id, boardId: paramBoardId });    JsonRoutes.sendResult(res, {      code: 200,      data: {        _id: id,      },    });  });}
 |