summaryrefslogtreecommitdiffstats
path: root/models/cardComments.js
diff options
context:
space:
mode:
Diffstat (limited to 'models/cardComments.js')
-rw-r--r--models/cardComments.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/models/cardComments.js b/models/cardComments.js
new file mode 100644
index 00000000..224deb03
--- /dev/null
+++ b/models/cardComments.js
@@ -0,0 +1,69 @@
+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,
+ },
+ // XXX Should probably be called `authorId`
+ userId: {
+ type: String,
+ },
+}));
+
+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 };
+
+CardComments.before.insert((userId, doc) => {
+ doc.createdAt = new Date();
+ doc.userId = userId;
+});
+
+if (Meteor.isServer) {
+ 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);
+ }
+ });
+}