12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- CardComments = new Mongo.Collection('card_comments');
- CardComments.attachSchema(new SimpleSchema({
- boardId: {
- type: String,
- },
- cardId: {
- type: String,
- },
- // XXX Rename in `content`? `text` is a bit vague...
- text: {
- type: String,
- },
- // XXX We probably don't need this information here, since we already have it
- // in the associated comment creation activity
- createdAt: {
- type: Date,
- denyUpdate: false,
- autoValue() { // eslint-disable-line consistent-return
- if (this.isInsert) {
- return new Date();
- } else {
- this.unset();
- }
- },
- },
- // XXX Should probably be called `authorId`
- userId: {
- type: String,
- autoValue() { // eslint-disable-line consistent-return
- if (this.isInsert && !this.isSet) {
- return this.userId;
- }
- },
- },
- }));
- CardComments.allow({
- insert(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
- },
- update(userId, doc) {
- return userId === doc.userId;
- },
- remove(userId, doc) {
- return userId === doc.userId;
- },
- fetch: ['userId', 'boardId'],
- });
- CardComments.helpers({
- user() {
- return Users.findOne(this.userId);
- },
- });
- CardComments.hookOptions.after.update = { fetchPrevious: false };
- if (Meteor.isServer) {
- // Comments are often fetched within a card, so we create an index to make these
- // queries more efficient.
- Meteor.startup(() => {
- CardComments._collection._ensureIndex({ cardId: 1, createdAt: -1 });
- });
-
- CardComments.after.insert((userId, doc) => {
- Activities.insert({
- userId,
- activityType: 'addComment',
- boardId: doc.boardId,
- cardId: doc.cardId,
- commentId: doc._id,
- });
- });
- CardComments.after.remove((userId, doc) => {
- const activity = Activities.findOne({ commentId: doc._id });
- if (activity) {
- Activities.remove(activity._id);
- }
- });
- }
|