summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOni-Men <sensyaheis@gmail.com>2020-02-26 07:54:35 +0900
committerGitHub <noreply@github.com>2020-02-26 07:54:35 +0900
commitf6c376f20d826cc551293ae67292ad0ba7152fab (patch)
tree22494b62244a1d9803668f9f64e7ca17782907df
parentMerge pull request #6084 from syuilo/patch/autogen/v11 (diff)
downloadmisskey-f6c376f20d826cc551293ae67292ad0ba7152fab.tar.gz
misskey-f6c376f20d826cc551293ae67292ad0ba7152fab.tar.bz2
misskey-f6c376f20d826cc551293ae67292ad0ba7152fab.zip
同じノートを何回リノートしても一回として数えるように (#6086)
* 同じノートを何回リノートしても一回として数えるように * Update count-same-renotes.ts Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
-rw-r--r--src/services/count-same-renotes.ts15
-rw-r--r--src/services/note/create.ts4
-rw-r--r--src/services/note/delete.ts4
3 files changed, 21 insertions, 2 deletions
diff --git a/src/services/count-same-renotes.ts b/src/services/count-same-renotes.ts
new file mode 100644
index 0000000000..a20b4fbf8c
--- /dev/null
+++ b/src/services/count-same-renotes.ts
@@ -0,0 +1,15 @@
+import { Notes } from '../models';
+
+export default async function(userId: string, renoteId: string, excludeNoteId: string | undefined): Promise<number> {
+ // 指定したユーザーの指定したノートのリノートがいくつあるか数える
+ const query = Notes.createQueryBuilder('note')
+ .where('note.userId = :userId', { userId })
+ .andWhere('note.renoteId = :renoteId', { renoteId })
+
+ // 指定した投稿を除く
+ if (excludeNoteId) {
+ query.andWhere('note.id != :excludeNoteId', { excludeNoteId })
+ }
+
+ return await query.getCount();
+}
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 3426083e30..98b1731802 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -30,6 +30,7 @@ import { isDuplicateKeyValueError } from '../../misc/is-duplicate-key-value-erro
import { ensure } from '../../prelude/ensure';
import { checkHitAntenna } from '../../misc/check-hit-antenna';
import { addNoteToAntenna } from '../add-note-to-antenna';
+import countSameRenotes from '../count-same-renotes';
type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
@@ -236,7 +237,8 @@ export default async (user: User, data: Option, silent = false) => new Promise<N
saveReply(data.reply, note);
}
- if (data.renote) {
+ //この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき
+ if (data.renote && (await countSameRenotes(user.id, data.renote.id, note.id) === 0)) {
incRenoteCount(data.renote);
}
diff --git a/src/services/note/delete.ts b/src/services/note/delete.ts
index 29b9c576da..6561120b49 100644
--- a/src/services/note/delete.ts
+++ b/src/services/note/delete.ts
@@ -11,6 +11,7 @@ import { Note } from '../../models/entities/note';
import { Notes, Users, Instances } from '../../models';
import { notesChart, perUserNotesChart, instanceChart } from '../chart';
import { deliverToFollowers } from '../../remote/activitypub/deliver-manager';
+import countSameRenotes from '../count-same-renotes';
/**
* 投稿を削除します。
@@ -20,7 +21,8 @@ import { deliverToFollowers } from '../../remote/activitypub/deliver-manager';
export default async function(user: User, note: Note, quiet = false) {
const deletedAt = new Date();
- if (note.renoteId) {
+ //この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき
+ if (note.renoteId && (await countSameRenotes(user.id, note.renoteId, note.id)) === 0) {
Notes.decrement({ id: note.renoteId }, 'renoteCount', 1);
Notes.decrement({ id: note.renoteId }, 'score', 1);
}