[API] Check post dupulication

This commit is contained in:
syuilo 2017-03-25 15:56:26 +09:00
parent c8479d103f
commit 47269a1782
3 changed files with 26 additions and 0 deletions

View file

@ -30,6 +30,7 @@
"@types/compression": "0.0.33", "@types/compression": "0.0.33",
"@types/cors": "2.8.1", "@types/cors": "2.8.1",
"@types/debug": "0.0.29", "@types/debug": "0.0.29",
"@types/deep-equal": "1.0.0",
"@types/elasticsearch": "5.0.13", "@types/elasticsearch": "5.0.13",
"@types/escape-html": "0.0.19", "@types/escape-html": "0.0.19",
"@types/event-stream": "3.3.31", "@types/event-stream": "3.3.31",
@ -78,6 +79,7 @@
"crypto": "0.0.3", "crypto": "0.0.3",
"css-loader": "0.27.3", "css-loader": "0.27.3",
"debug": "2.6.3", "debug": "2.6.3",
"deep-equal": "1.0.1",
"deepcopy": "0.6.3", "deepcopy": "0.6.3",
"download": "5.0.3", "download": "5.0.3",
"elasticsearch": "12.1.3", "elasticsearch": "12.1.3",

View file

@ -2,6 +2,7 @@
* Module dependencies * Module dependencies
*/ */
import $ from 'cafy'; import $ from 'cafy';
import deepEqual = require('deep-equal');
import parse from '../../common/text'; import parse from '../../common/text';
import Post from '../../models/post'; import Post from '../../models/post';
import { isValidText } from '../../models/post'; import { isValidText } from '../../models/post';
@ -142,6 +143,20 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => {
return rej('text, media_ids, repost_id or poll is required'); return rej('text, media_ids, repost_id or poll is required');
} }
// 直近の投稿と重複してたらエラー
// TODO: 直近の投稿が一日前くらいなら重複とは見なさない
if (user.latest_post) {
if (deepEqual({
text: user.latest_post.text,
media_ids: (user.latest_post.media_ids || []).map(id => id.toString())
}, {
text: text,
media_ids: (files || []).map(file => file._id.toString())
})) {
return rej('duplicate');
}
}
// 投稿を作成 // 投稿を作成
const post = await Post.insert({ const post = await Post.insert({
created_at: new Date(), created_at: new Date(),
@ -163,6 +178,12 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => {
//-------------------------------- //--------------------------------
// Post processes // Post processes
User.update({ _id: user._id }, {
$set: {
latest_post: post
}
});
let mentions = []; let mentions = [];
function addMention(mentionee, type) { function addMention(mentionee, type) {

View file

@ -65,6 +65,9 @@ export default (
_user.id = _user._id; _user.id = _user._id;
delete _user._id; delete _user._id;
// Remove needless properties
delete _user.lates_post;
// Remove private properties // Remove private properties
delete _user.password; delete _user.password;
delete _user.token; delete _user.token;