From 47269a1782d56ae75d4cf210ad7eac1e3fb94a64 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 25 Mar 2017 15:56:26 +0900 Subject: [API] Check post dupulication --- src/api/endpoints/posts/create.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/api/endpoints/posts/create.ts') diff --git a/src/api/endpoints/posts/create.ts b/src/api/endpoints/posts/create.ts index 60b3592682..9ece143fa1 100644 --- a/src/api/endpoints/posts/create.ts +++ b/src/api/endpoints/posts/create.ts @@ -2,6 +2,7 @@ * Module dependencies */ import $ from 'cafy'; +import deepEqual = require('deep-equal'); import parse from '../../common/text'; import Post 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'); } + // 直近の投稿と重複してたらエラー + // 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({ created_at: new Date(), @@ -163,6 +178,12 @@ module.exports = (params, user, app) => new Promise(async (res, rej) => { //-------------------------------- // Post processes + User.update({ _id: user._id }, { + $set: { + latest_post: post + } + }); + let mentions = []; function addMention(mentionee, type) { -- cgit v1.2.3-freya