Refactor
This commit is contained in:
parent
60a7640eb1
commit
23282c2414
|
@ -103,23 +103,23 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get 'in_reply_post_id' parameter
|
// Get 'reply_id' parameter
|
||||||
const [inReplyToPostId, inReplyToPostIdErr] = $(params.reply_id).optional.id().$;
|
const [replyId, replyIdErr] = $(params.reply_id).optional.id().$;
|
||||||
if (inReplyToPostIdErr) return rej('invalid in_reply_post_id');
|
if (replyIdErr) return rej('invalid reply_id');
|
||||||
|
|
||||||
let inReplyToPost: IPost = null;
|
let reply: IPost = null;
|
||||||
if (inReplyToPostId !== undefined) {
|
if (replyId !== undefined) {
|
||||||
// Fetch reply
|
// Fetch reply
|
||||||
inReplyToPost = await Post.findOne({
|
reply = await Post.findOne({
|
||||||
_id: inReplyToPostId
|
_id: replyId
|
||||||
});
|
});
|
||||||
|
|
||||||
if (inReplyToPost === null) {
|
if (reply === null) {
|
||||||
return rej('in reply to post is not found');
|
return rej('in reply to post is not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返信対象が引用でないRepostだったらエラー
|
// 返信対象が引用でないRepostだったらエラー
|
||||||
if (inReplyToPost.repost_id && !inReplyToPost.text && !inReplyToPost.media_ids) {
|
if (reply.repost_id && !reply.text && !reply.media_ids) {
|
||||||
return rej('cannot reply to repost');
|
return rej('cannot reply to repost');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返信対象の投稿がこのチャンネルじゃなかったらダメ
|
// 返信対象の投稿がこのチャンネルじゃなかったらダメ
|
||||||
if (inReplyToPost && !channelId.equals(inReplyToPost.channel_id)) {
|
if (reply && !channelId.equals(reply.channel_id)) {
|
||||||
return rej('チャンネル内部からチャンネル外部の投稿に返信することはできません');
|
return rej('チャンネル内部からチャンネル外部の投稿に返信することはできません');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 返信対象の投稿がチャンネルへの投稿だったらダメ
|
// 返信対象の投稿がチャンネルへの投稿だったらダメ
|
||||||
if (inReplyToPost && inReplyToPost.channel_id != null) {
|
if (reply && reply.channel_id != null) {
|
||||||
return rej('チャンネル外部からチャンネル内部の投稿に返信することはできません');
|
return rej('チャンネル外部からチャンネル内部の投稿に返信することはできません');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
media_ids: (user.latest_post.media_ids || []).map(id => id.toString())
|
media_ids: (user.latest_post.media_ids || []).map(id => id.toString())
|
||||||
}, {
|
}, {
|
||||||
text: text,
|
text: text,
|
||||||
reply: inReplyToPost ? inReplyToPost._id.toString() : null,
|
reply: reply ? reply._id.toString() : null,
|
||||||
repost: repost ? repost._id.toString() : null,
|
repost: repost ? repost._id.toString() : null,
|
||||||
media_ids: (files || []).map(file => file._id.toString())
|
media_ids: (files || []).map(file => file._id.toString())
|
||||||
})) {
|
})) {
|
||||||
|
@ -211,7 +211,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
channel_id: channel ? channel._id : undefined,
|
channel_id: channel ? channel._id : undefined,
|
||||||
index: channel ? channel.index + 1 : undefined,
|
index: channel ? channel.index + 1 : undefined,
|
||||||
media_ids: files ? files.map(file => file._id) : undefined,
|
media_ids: files ? files.map(file => file._id) : undefined,
|
||||||
reply_id: inReplyToPost ? inReplyToPost._id : undefined,
|
reply_id: reply ? reply._id : undefined,
|
||||||
repost_id: repost ? repost._id : undefined,
|
repost_id: repost ? repost._id : undefined,
|
||||||
poll: poll,
|
poll: poll,
|
||||||
text: text,
|
text: text,
|
||||||
|
@ -287,23 +287,23 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// If has in reply to post
|
// If has in reply to post
|
||||||
if (inReplyToPost) {
|
if (reply) {
|
||||||
// Increment replies count
|
// Increment replies count
|
||||||
Post.update({ _id: inReplyToPost._id }, {
|
Post.update({ _id: reply._id }, {
|
||||||
$inc: {
|
$inc: {
|
||||||
replies_count: 1
|
replies_count: 1
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 自分自身へのリプライでない限りは通知を作成
|
// 自分自身へのリプライでない限りは通知を作成
|
||||||
notify(inReplyToPost.user_id, user._id, 'reply', {
|
notify(reply.user_id, user._id, 'reply', {
|
||||||
post_id: post._id
|
post_id: post._id
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fetch watchers
|
// Fetch watchers
|
||||||
Watching
|
Watching
|
||||||
.find({
|
.find({
|
||||||
post_id: inReplyToPost._id,
|
post_id: reply._id,
|
||||||
user_id: { $ne: user._id },
|
user_id: { $ne: user._id },
|
||||||
// 削除されたドキュメントは除く
|
// 削除されたドキュメントは除く
|
||||||
deleted_at: { $exists: false }
|
deleted_at: { $exists: false }
|
||||||
|
@ -323,10 +323,10 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
// この投稿をWatchする
|
// この投稿をWatchする
|
||||||
// TODO: ユーザーが「返信したときに自動でWatchする」設定を
|
// TODO: ユーザーが「返信したときに自動でWatchする」設定を
|
||||||
// オフにしていた場合はしない
|
// オフにしていた場合はしない
|
||||||
watch(user._id, inReplyToPost);
|
watch(user._id, reply);
|
||||||
|
|
||||||
// Add mention
|
// Add mention
|
||||||
addMention(inReplyToPost.user_id, 'reply');
|
addMention(reply.user_id, 'reply');
|
||||||
}
|
}
|
||||||
|
|
||||||
// If it is repost
|
// If it is repost
|
||||||
|
@ -427,7 +427,7 @@ module.exports = (params, user: IUser, app) => new Promise(async (res, rej) => {
|
||||||
if (mentionee == null) return;
|
if (mentionee == null) return;
|
||||||
|
|
||||||
// 既に言及されたユーザーに対する返信や引用repostの場合も無視
|
// 既に言及されたユーザーに対する返信や引用repostの場合も無視
|
||||||
if (inReplyToPost && inReplyToPost.user_id.equals(mentionee._id)) return;
|
if (reply && reply.user_id.equals(mentionee._id)) return;
|
||||||
if (repost && repost.user_id.equals(mentionee._id)) return;
|
if (repost && repost.user_id.equals(mentionee._id)) return;
|
||||||
|
|
||||||
// Add mention
|
// Add mention
|
||||||
|
|
Loading…
Reference in a new issue