This commit is contained in:
syuilo 2017-06-07 00:44:26 +09:00
parent eea09bc376
commit 079f2098e3
4 changed files with 80 additions and 0 deletions

View File

@ -0,0 +1,21 @@
import * as mongodb from 'mongodb';
import Watching from '../models/post-watching';
export default async (me: mongodb.ObjectID, post: mongodb.ObjectID) => {
// if watching now
const exist = await Watching.findOne({
post_id: post,
user_id: me,
deleted_at: { $exists: false }
});
if (exist !== null) {
return;
}
await Watching.insert({
created_at: new Date(),
post_id: post,
user_id: me
});
};

View File

@ -4,7 +4,9 @@
import $ from 'cafy'; import $ from 'cafy';
import Vote from '../../../models/poll-vote'; import Vote from '../../../models/poll-vote';
import Post from '../../../models/post'; import Post from '../../../models/post';
import Watching from '../../../models/post-watching';
import notify from '../../../common/notify'; import notify from '../../../common/notify';
import watch from '../../../common/watch-post';
import { publishPostStream } from '../../../event'; import { publishPostStream } from '../../../event';
/** /**
@ -75,6 +77,32 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
post_id: post._id, post_id: post._id,
choice: choice choice: choice
}); });
// Fetch watchers
Watching
.find({
post_id: post._id,
user_id: { $ne: user._id },
// 削除されたドキュメントは除く
deleted_at: { $exists: false }
}, {
fields: {
user_id: true
}
})
.then(watchers => {
watchers.forEach(watcher => {
notify(watcher.user_id, user._id, 'poll_vote', {
post_id: post._id,
choice: choice
});
});
});
// この投稿をWatchする
// TODO: ユーザーが「投票したときに自動でWatchする」設定を
// オフにしていた場合はしない
watch(user._id, post._id);
}); });
function findWithAttr(array, attr, value) { function findWithAttr(array, attr, value) {

View File

@ -4,7 +4,9 @@
import $ from 'cafy'; import $ from 'cafy';
import Reaction from '../../../models/post-reaction'; import Reaction from '../../../models/post-reaction';
import Post from '../../../models/post'; import Post from '../../../models/post';
import Watching from '../../../models/post-watching';
import notify from '../../../common/notify'; import notify from '../../../common/notify';
import watch from '../../../common/watch-post';
import { publishPostStream } from '../../../event'; import { publishPostStream } from '../../../event';
/** /**
@ -84,4 +86,30 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
post_id: post._id, post_id: post._id,
reaction: reaction reaction: reaction
}); });
// Fetch watchers
Watching
.find({
post_id: post._id,
user_id: { $ne: user._id },
// 削除されたドキュメントは除く
deleted_at: { $exists: false }
}, {
fields: {
user_id: true
}
})
.then(watchers => {
watchers.forEach(watcher => {
notify(watcher.user_id, user._id, 'reaction', {
post_id: post._id,
reaction: reaction
});
});
});
// この投稿をWatchする
// TODO: ユーザーが「リアクションしたときに自動でWatchする」設定を
// オフにしていた場合はしない
watch(user._id, post._id);
}); });

View File

@ -0,0 +1,3 @@
import db from '../../db/mongodb';
export default db.get('post_watching') as any; // fuck type definition