同じノートを何回リノートしても一回として数えるように (#6086)
* 同じノートを何回リノートしても一回として数えるように * Update count-same-renotes.ts Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
This commit is contained in:
		
							parent
							
								
									241769d6fc
								
							
						
					
					
						commit
						f6c376f20d
					
				
					 3 changed files with 21 additions and 2 deletions
				
			
		
							
								
								
									
										15
									
								
								src/services/count-same-renotes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/services/count-same-renotes.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,7 @@ import { isDuplicateKeyValueError } from '../../misc/is-duplicate-key-value-erro
 | 
				
			||||||
import { ensure } from '../../prelude/ensure';
 | 
					import { ensure } from '../../prelude/ensure';
 | 
				
			||||||
import { checkHitAntenna } from '../../misc/check-hit-antenna';
 | 
					import { checkHitAntenna } from '../../misc/check-hit-antenna';
 | 
				
			||||||
import { addNoteToAntenna } from '../add-note-to-antenna';
 | 
					import { addNoteToAntenna } from '../add-note-to-antenna';
 | 
				
			||||||
 | 
					import countSameRenotes from '../count-same-renotes';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 | 
					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);
 | 
							saveReply(data.reply, note);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (data.renote) {
 | 
						//この投稿を除く指定したユーザーによる指定したノートのリノートが存在しないとき
 | 
				
			||||||
 | 
						if (data.renote && (await countSameRenotes(user.id, data.renote.id, note.id) === 0)) {
 | 
				
			||||||
		incRenoteCount(data.renote);
 | 
							incRenoteCount(data.renote);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@ import { Note } from '../../models/entities/note';
 | 
				
			||||||
import { Notes, Users, Instances } from '../../models';
 | 
					import { Notes, Users, Instances } from '../../models';
 | 
				
			||||||
import { notesChart, perUserNotesChart, instanceChart } from '../chart';
 | 
					import { notesChart, perUserNotesChart, instanceChart } from '../chart';
 | 
				
			||||||
import { deliverToFollowers } from '../../remote/activitypub/deliver-manager';
 | 
					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) {
 | 
					export default async function(user: User, note: Note, quiet = false) {
 | 
				
			||||||
	const deletedAt = new Date();
 | 
						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 }, 'renoteCount', 1);
 | 
				
			||||||
		Notes.decrement({ id: note.renoteId }, 'score', 1);
 | 
							Notes.decrement({ id: note.renoteId }, 'score', 1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue